什么是SSL
HTTPS HTTP+SSL
SSL安全套接层,TSL传输安全层
TLS与SSL在传输层对网络连接进行加密
SSL的一大优势在于它独立于上层协议,和HTTP结合即为HTTPS,和WebSocket结合即为WSS
通常认为SSL和TSL指代同一个标准,两者之间的差异极小
SSL原理
不同的SSL握手过程存在差异,分为以下三种
- 只验证服务器
- 验证客户端和服务器
- 恢复原有会话
验证服务器建立链接的过程
-
客户端发送Client Hello 消息,该消息包括SSL版本信息,一个随机数 random1,一个session id,和浏览器支持的密码套件cipher suite
密码套件包含了以下四种途径的算法:
- 密钥交换算法,RSA,PSK等
- 数据加密算法,AES 256,RC4等
- 报文认证信息码(MAC)算法,MD5,SHA等
- 伪随机数(PRF)算法
-
服务器确定本次通信使用的SSL的版本和其他信息,发送Server Hello给客户端,包括服务器支持的SSL版本,一个伪随机数random2,服务器的cipher suite
-
服务器发送CA证书给客户端
-
服务器发送Server Hello done
-
客户端验证服务器证书的合法性后(Certificate Verify), 利用证书中的公钥加密 premaster secret 作为Client Key Exchange 的消息发送给服务器
-
SSL客户端发送Change Cipher Spec 消息,该消息属于SSL密码变化协议
-
客户端计算历史消息的hash值,然后使用服务器公钥加密后发送给服务器,服务器进行同样的操作,然后两个值结果相同标识密钥交换成功
-
服务器发送Change Cipher Spec 消息
-
服务器计算历史消息的hash值,通过交换后的密钥加密,将其作为finished消息发送给客户端,客户端利用交换后的密钥解密,如果和本地历史消息相同就证明服务器身份。握手结束。
密钥交换步骤
在对称加密的情况下,客户端需要将解密的密钥发送给服务器。在非对称加密的情况下,则是要将自己的私钥发送给对方
一个密钥交换通常分为Certificate Verify 以及 Client Key Exchange 两个步骤, 以RSA算法为例
-
客户端收到服务端传来的证书后,先验证该证书的合法性,验证通过后取出证书中的服务端公钥,再生成一个随机数 random3,再用服务端的公钥加密 Random3 生成PreMaster Key
-
服务端用自己的私钥解出这个PreMaster Key,得到客户端生成的random3,再加上前面生成的random1 和 random2,至此,服务端和客户端都有了random1 + random2 +random3,两边
再根据同样的算法就可以生成一份密钥,握手结束后的应用层数据都是使用这个密钥进行对称加密
对称加密与非对称加密
- 对称加密,信息的发送方和接收方用同一个密钥去加密和解密数据。优势是速度快,适用于对大数据量进行加密
- 非对称加密,信息发送者用公钥去加密,接收者用私钥去解密。公钥机制灵活,但加解密速度慢。
关于CA
CA(证书授权),通常表示一个第三方组织,专门用来验证服务器证书的准确性。
一个CA文件包含的内容包括用户信息,CA签发机构信息,用户公钥,有效日期,CA签发机构签名(CA签发机构用私钥签名,用于将用户信息+用户公钥等信息进行签名确保内容真实性),CA签发机构的公钥(用于让用户研恒签发证书是否是CA签发机构签发的)