https原理
一、核心思想
HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用加密算法,因对称加密算法的开销较小,所以传输的明文内容使用对称加密算法。
问题1:协商的密钥如果不加密,那么内容加密也就没有意义了,因此需要使用非对称加密算法来保证协商出来的密钥的安全。
问题2: 直接使用非对称加密的过程本身也不安全,私钥由服务器持有,公钥需传输给客户端,如果服务器直接向客户端发送公钥,那么会有中间人替换公钥的可能性。
解决办法:
使用第三方(即CA)来托管服务器的公钥,并使用数字签名技术校验服务器公钥的真假。
数字签名的过程:证书颁发机构对申请者信息的明文内容使用hash算法生成消息摘要,然后使用自己的私钥对消息摘要进行加密,生成签名。
数字签名校验过程: 客户端的操作系统内置了CA机构的公钥,收到服务器发来的证书后采用相同的散列函数计算得到信息摘要,然后,利用对应 CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则服务器的公钥是值得信赖的。
二.工作流程图
三. 详细流程描述
1.浏览器将自己支持的对称加密算法发送给服务端
2. 服务器从中选出一套双方都支持的加密算法以及自己的身份信息以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的颁发机构
3.验证证书的合法性
a. 从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥进行下一步
b. 用机构的证书公钥解密得到证书的内容和证书签名,浏览器根据服务器返回的证书信息计算签名,比对是否一致
4.浏览器端生成一个随机数R,做为对称加密的密钥并使用服务器的公钥对随机数R加密,然后发送给服务器
5.服务器使用自己的私钥解密,得到R
6.服务器使用R来加密网页内容
7.客户端使用R来解密内容
8.客户端使用R来加密要发送的内容