SSL工作原理介绍以及java实现

SSL工作原理介绍以及java实现

目录

Secure Sockets Layer(安全套接层),在OSI七层模型里,该协议工作在会话层和表示层。本文主要从SSL原理入手,讲解SSL认证过程,并使用java实现单向认证。

1. SSL简介

安全套接字(Secure Socket Layer,SSL)协议是一个TCP连接之间安全交换信息的协议,提供两个基本的安全服务:鉴别与保密。

SSL是Netscape于1994年开发的,后来成为了世界上最通用的安全连接机制,主流的浏览器(IE/Chrome/Firefox等)以及操作系统远程连接服务(Windows的mstsc/Linux的SSH等)都支持SSL协议。

目前有如下版本:SSL2.0、SSL3.0、TLS1.0、TLS1.1、TLS1.2。因之前旧版本暴露出多个严重bug,目前推荐使用TLS1.2版本。

2. SSL工作原理

握手协议(Handshake protocol)

SSL中密钥交换算法有6种:无效(没有密钥交换)、RSA、匿名Diffie-Hellman、暂时Diffie-Hellman、固定Diffie-Hellman、Fortezza。本文以RSA与匿名Diffie-Hellman模式介绍握手协议。

2.1握手阶段使用RSA加密算法
RSA算法概述:
(1)选择两个大素数P、Q
(2)计算N=P*Q
(3)选择一个公钥(加密密钥)E,使其不是(P-1)与(Q-1)的因子
(4)选择私钥(解密密钥)D,满足如下条件:
          (D*E) mod (P-1)(Q-1)=1
(5)加密时,明文PT计算密文CT如下:
          CT= PT·E mod N
(6)解密时,从密文CT计算明文PT如下:
          PT= CT·D mod N 这也是SSL中会用一种密钥交换算法。 

开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake)。握手阶段分成五步。

第一步,Client给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。

第二步,Server确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。

第三步,Client确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给Server。

第四步,Server使用自己的私钥,获取Client发来的随机数(即Premaster secret)。

第五步,Client和Server根据约定的加密方法,使用前面的三个随机数,生成”对话密钥”(session key),用来加密接下来的整个对话过程。

上面的五步,如下图所示:

SSL单向认证(RSA)

RSA加密算法的握手阶段有四点需要注意:

(1)整个握手阶段都是明文传输。如果有人窃听通信,他可以知道双方选择的加密方法,以及三个随机数中的两个。

(2)生成对话密钥一共需要三个随机数。

(3)握手之后的对话使用”对话密钥”加密(对称加密),服务器的公钥和私钥只用于加密和解密”对话密钥”(非对称加密),无其他作用。

(4)服务器公钥放在服务器的数字证书之中。

也就是说,整个对话过程中(握手阶段和其后的对话),服务器的公钥和私钥只需要用到一次。整个通话的安全,只取决于第三个随机数(Premaster secret)能不能被破解。

理论上,只要服务器的公钥足够长(比如2048位),那么Premaster secret可以保证不被破解。但是为了足够安全,我们可以考虑把握手阶段的算法从默认的RSA算法,改为Diffie-Hellman算法(简称DH算法)。

2.2握手阶段使用Diffie-Hellman加密算法
Diffie-Hellman算法概述:
(1)Alice与Bob确定两个大素数n和g,这两个数不用保密
(2)Alice选择另一个大随机数x,并计算A如下:A=gx mod n
(3)Alice将A发给Bob
(4)Bob选择另一个大随机数y,并计算B如下:B=gy mod n
(5)Bob将B发给Alice
(6)计算Alice的秘密密钥K1如下:K1=Bx mod n
(7)计算Bob的秘密密钥K2如下:K2=Ay mod n
K1=K2,因此Alice和Bob可以用其进行加解密 

使用Diffie-Hellman加密算法时,握手阶段分成五步。

第一步,Client给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。

第二步,Server确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。通过Client random、Server random以及服务器提供的DH参数(Server DH parameter)算出私钥。

第三步,Server端使用私钥加密Server DH parameter,发送给Client。Client使用证书中公钥解密得到Server DH parameter。

第四步,Client将客户端提供的DH参数(Client DH parameter)传给Server。

第五步,Client和Server根据约定的加密方法,使用之前双方交换的DH参数生成”秘密密钥”(Premaster secret),用来加密接下来的整个对话过程(Session key)。

上面的五步,如下图所示:

这里写图片描述

Diffie-Hellman加密算法规避了RSA中秘密密钥的传递,整个过程中只传递了参数,更加安全,但与之对应的连接资源开销也变得更大。

记录协议(Record protocol)

记录协议在客户机和服务器握手成功后使用,即客户机和服务器鉴别对方和确定安全信息交换使用的算法后,进入SSL记录协议,记录协议向SSL连接提供两个服务:

(1)保密性:使用握手协议定义的秘密密钥实现

(2)完整性:握手协议定义了MAC,用于保证消息完整性

记录协议的过程:

这里写图片描述

警报协议(Alert pro

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值