文章目录
SSL介绍
SSL:安全套接字协议是Web浏览器和Web服务器之间安全交换信息的协议,它提供两个基本安全服务:鉴别和保密
SSL特点
- 保密:所有消息都被加密
- 鉴别:可以单向认证(客户端鉴别服务端),也可以双向认证(服务端鉴别客户端、客户端鉴别服务端)
- 完整性:由于其基于TCP协议,因此可以保证消息的完整性
SSL的位置:
SSL介于TCP协议之上,应用层协议之下:
概念讲解
- 密钥交换算法:就是非对称加密算法,使用这个算法和对应的公钥对预备主密钥进行加密
- 预备主密钥:客户端生成,用于后面生成主密钥
- 主密钥:加密通信内容的对称加密密钥,有客户端生成的随机数,服务端生成的随机数和客户端生成的预备主密钥一起计算产生
SSL协议通信过程
简单来说,SSL协议同时用到了对称加密和非对称加密。对称加密只有一个密钥,用这个密钥进行加密和解密,非对称加密有公钥和私钥之分,一般使用公钥进行加密,私钥进行解密(也可以私钥加密,公钥解密)。通信时,客户端生成一个对称加密的密钥,然后将这个密钥使用服务器的公钥进行加密后发送给服务器,服务器使用自己的私钥解密后就可以得到对称加密的密钥,接下的通信内容都使用这个密钥对内容进行加密和解密。
SSL协议又可以进一步分为:SSL握手协议
和SSL记录协议
SSL握手协议
使用SSL协议进行通信前,需要使用握手协议进行握手,就是验证对方身份,协商加密算法及保密密钥等。
握手流程
第一阶段
- 客户端向服务端发送一个
client hello
消息,包括:- 版本(
Version
:客户端支持的最高SSL版本) - 随机数(
Random
:用于生成主密钥的32字节的随机数) - 会话ID(
Session ID
:该通信属于哪个会话) - 密码套件(
Cipher suite
:客户端支持的密码套件类别) - 压缩方法(
Compression method
:客户端支持的压缩算法列表)
- 版本(
- 服务端返回
Server hello
消息对client hello
消息进行确认。Server hello
中同样包含上述5个信息:- 版本(
Version
:告知客户端选定的版本,取双方都支持的最高版本) - 随机数(
Random
:服务端同样生成一个用于生成主密钥的32字节的随机数,客户端一个,服务端一个) - 会话ID(
Session ID
:该通信属于哪个会话) - 密码套件(
Cipher suite
:告知服务端选定的密码套件,从客户端支持的列表中选择一个) - 压缩方法(
Compression method
:告知客户端选择的压缩方法,从客户端的支持列表地中选择一个)
经过第一阶段后,客户端和服务端都知道了下列内容:- 应该选择的SSL版本
- 有关密钥生成的两个随机数
- 应该采用的密钥交换、信息验证和加密算法
- 应该采用的压缩算法
- 版本(
第二阶段
第二阶段的消息全部由服务端发送,客户端只接收不发送任何消息
- 服务端将自己证书到根CA的整个证书链的证书发送给客户端,让客户端验证服务端的身份
- 密钥交换算法补充信息(可选):第一阶段的密码套件中已经确定了密钥交换算法,这里可能会包含算法所需的额外参数。
- 证书请求:服务端可能会要求客户自身进行验证。(如果是双向认证)
- 发送
Server Hello Done
消息,第二阶段介绍,第三阶段开始
经过这一阶段,客户端拿到了服务端的证书,可以对服务端身份进行验证,并且可以获得服务端的公钥(在证书中或在密钥交换算法补充信息中)
第三阶段
这一阶段,客户端发送消息,服务端接收消息
- 客户端向服务端发送自己的证书到根CA的整个证书链的证书,让服务端验证客户端的身份(如果是双向认证)
- 客户端生成随机预备主密钥,使用服务端的公钥进行加密后发送给服务端,服务端公钥在服务端的证书中,在第二阶段已经获得
- 证书验证:对预备主密钥和随机数进行签名,证明拥有客户端证书的公钥。(如果需要)
第三阶段完成后,客户端和服务端都验证了对方的身份,并且都知道了预备主密钥。并且通过预备主密钥,和两个随机数,计算出了主密钥
第四阶段
该阶段客户端先发送2个消息,然后服务端发送两个消息
- 客户端改变密码规格:此时双方已经为加密通信做好准备了,这时客户端告知服务端接下来的消息将使用协商好的加密套件和密钥进行通信(自己要切换密码了)。
- 客户端将之前所有协商的参数计算
HASH
值,然后使用主密钥进行加密后发送给服务端 - 服务端接收到信息后,使用主密钥解密并与自己计算的之前所有协商参数的
HASH
值对比,通过够发送改变密码规格消息 - 服务端发送改变密码规格消息,告知客户端自己要切换密码了
- 服务端将之前所有协商的参数计算
HASH
值,然后使用主密钥进行加密后发送给客户端端 - 服务端接收到信息后,使用主密钥解密并与自己计算的之前所有协商参数的
HASH
值对比,通过后表明前面的过程都无异常,至此握手结束。
SSL记录协议
握手完成后,双方已经协商好了加密算法和密钥,记录协议就是使用加密算法和密钥对通信内容进行加密,并将加密后的内容传给应用层协议,比如HTTP协议
SSL与TLS的异同点
TLS
是SSL
的升级版,是SSL 3.0
的后续版本。IETF
将SSL
标准化,即RFC 2246
,并将其称为TLS(Transport Layer Security)
。从技术上讲,TLS 1.0
与SSL 3.0
的差异非常微小。