Http所有内容都是明文,会容易被篡改,因此引入Https(Http Over SSL/TLS),添加了SSL/TLS进行加密。 Http原本是直接运行在Tcp之上的
- Http
- SSL/TLS 1.2/1.3
- TCP
- IP
- MAC
SSL1.0 → SSL2.0 → SSL3.0 → TLS1.0 → TLS1.1 → TLS1.2 → TLS1.3
SSL:secure socket layer,是TLS的前身,现在被淘汰了。
TLS:主流使用的版本1.2或1.3。TLS/1.2最核心的两个算法是RSA和DH。
安全协议需要考虑
- 机密性
我们的网络内容不能以明文的形式在网络中传输。对称加密/非对称加密。
- 完整性
不能被修改,就算修改了我们也能发现。Hash算法,算出内容摘要。
- 身份认证 服务器需要SSL证书,证书需要向CA申请。证书里包括了特定的公钥和私钥。 CA
TLS1.2客户端服务器通信过程:
仍然有TCP3次握手,TCP三次握手以后。
- ClientHello_客户端向服务器发送请求,里面包含了TLS version,Client短生成的随机数第1随机数,Cipher Suites(Client支持的加密算法)/RSA/ECC...
- ServerHello_答复,包含了TLS version,Server端产生的随机数第2随机数、Cipher Suites
- Certificate服务器响应出示证书。_Server端确认后会发送一个证书链条。客户端[如浏览器]就可以根据自己信任的证书列表确定这个服务器是否可信。
- Server Key Exchange。 Server和client互换Key。服务器就把公钥发送给了客户端。如果服务器也想要客户端的证书会在这里发出请求。[如登录网银]
- ServerHelloDone发送完了
- 客户端生成随机数预主密钥第3随机数预主密钥。用收到的公钥加密后在发给服务端。
- 服务端收到后用自己的私钥解密就知道预主密钥了。
- 客户端用第1随机数和第2随机数和预主密钥计算出会话密钥
- 服务端用第1随机数和第2随机数和预主密钥计算出会话密钥,与客户端得到的是相同的。
- 服务端发送Encrypted Handshake Message
- 对通信进行对称加密。
注:
- 如果TLS版本不能得到确认,会终止在step 2。
- 如果步骤3的证书链条有问题,就会终止在步骤3了。
- 通信分为密钥交换和对称加密通信
【参考:】