HTTPS
HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是经由HTTP进行通信,但利用SSL/TLS来加密数据包,是以安全为目的的HTTP通道。即在HTTP之下增加的一个安全层,用于保障HTTP的加密传输。
本质是在客户端和服务器中间协商出一套对称密钥,每次发送信息之前将内容加密,收到之后解密,达到内容的加密传输。
HTTPS连接
HTTPS连接过程主要可以划分为以下五步:
1.客户端请求建立TLS连接
2.服务器发回证书
3.客户端验证服务器证书
4.两端协商对称密钥
5.使用对称密钥开始通信
详细的连接建立过程为
a.协商沟通方式以及认证身份
步骤1,步骤2之后服务器和客户端拥有的资源如下表
客户端 | 服务器 |
---|---|
TLS版本 | TLS版本 |
非对称加密算法 | 非对称加密算法 |
对称加密算法 | 对称加密算法 |
哈希算法 | 哈希算法 |
客户端随机数 | 服务器随机数 |
服务器随机数 | 客户端随机数 |
服务器公钥 | 服务器私钥 |
此时客户端也有了服务器的证书,可以对服务器的身份进行验证。
其中的非对称加密算法、对称加密算法、哈希算法合起来被称作CipherSuite。
b.协商对称密钥
客户端确认了服务器的合法身份之后,二者开始协商对称密钥(该对称密钥是用来在密钥协商过程完成后,后续通信的使用),协商对称密钥的过程是使用的是非对称加密,这是https连接建立过程中的第一次加密,也是唯一一次的非对称加密
步骤4:客户端在a过程中获得了服务器随机数后就能够利用现有资源生成Pre-master Secret(本质随机数)。此时客户端可以使用客户端随机数、服务器随机数、Pre-master Secret三者计算出Master Secret,然后通过Master Secret计算出客户端加密密钥、服务端加密密钥、客户端MAC Secret、服务器MAC Secret,过程简化如下图:
客户端使用服务器证书中包含的服务器公钥加密Pre-master Secret发给服务器。
服务器使用自己的私钥对客户端发过来的加密后的Pre-master Secret解密。
上述过程即为非对称加密过程。
服务器解密之后,同样也是使用客户端随机数、服务器随机数、Pre-master Secret三者计算出Master Secret,然后通过Master Secret计算出客户端加密密钥、服务端加密密钥、客户端MAC Secret、服务器MAC Secret
c.协商密钥的验证
步骤5是几个字节的通知信息,告诉服务器将使用加密通信。
步骤6使用客户端加密密钥进行加密,配合使用客户端MAC Secret进行Hash(HMAC)计算,用来作为身份的验证方式(类似于签名)。
服务端在收到客户端的Finished消息后对消息进行验证:
1.服务器将之前所有的消息(步骤1234)也进行一个Hash
2.服务器将客户端的消息使用客户端加密密钥进行解密
3.判断1和2的数据是否相同,若相同则说明可以信任,并且两边所使用的密钥是相同的
步骤5和6即为一次通过对称加密信息后进行通信的过程。
步骤7和步骤8与步骤5和步骤6的验证过程是相同的,区别在于步骤8中囊括的信息更多些(增加了5和6的消息),加密解密使用的是服务端加密密钥,Hash使用的是服务端MAC Secret进行计算。
d.正式通信
总结
上述完整流程为