历史
在TCP/IP模型中位置
特点
- SSL/TLS由于使用了加密算法,非常消耗CPU资源,因此应该尽可能将SSL在LB(负载均衡,Load Balance)层终结掉。终结的意思是负载均衡器对外提供SSL连接,对内提供TCP连接,把SSL剥离掉。这样传输更快,且后端服务不需要消耗CPU资源处理SSL了(后端服务一般都是VPC的,肯定安全)。常见的开源负载均衡器HAProxy、开源反向代理Nginx、收费负载均衡器AWS ELB等都是可以终结的。
TLS协议的架构
握手协议
- ClientKeyExchange
分两种情况:
-
如果是公钥或者RSA模式情况下,客户端将根据客户端生成的随机数和服务器端生成的随机数,生成 预备主密码,通过该公钥进行加密,返送给服务器端。
-
如果使用的是Diff-Hellman密钥交换协议,则客户端会发送自己这一方要生成Diff-Hellman密钥而需要公开的值。具体内容可以参考更加安全的密钥生成方法Diffie-Hellman,这样服务器端可以根据这个公开值计算出预备主密码。
-
- 一个加密套件包括四个部分(SSL_RSA_WITH_RC4_128_SHA):
- Is Exportable:是否可以导出
- Key Exchange:密钥交换算法。用于密钥协商。
- Cipher:对称加密算法。用于信息加密。
- Hash:MAC的计算方法。用于完整性检验。
- 握手协议最后将计算全部的握手信息的MAC,当MAC不相等时将会直接结束会话
- 主密码和预备主密码
- 上面的步骤8生成了预备主密码,主密码是根据密码套件中定义的单向散列函数实现的伪随机数生成器+预备主密码+客户端随机数+服务器端随机数生成的。
- 主密码主要用来生成称密码的密钥,消息认证码的密钥和对称密码的CBC模式所使用的初始化向量。详见分组密码和模式
|
|
|
|
TLS记录协议
|
|
|
|
|
|
参考
https://zhuanlan.zhihu.com/p/133375078
http://www.bewindoweb.com/271.html
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
https://www.ibm.com/docs/en/ztpf/1.1.0.15?topic=sessions-ssl-record-format
https://datatracker.ietf.org/doc/html/rfc5246#section-7.3
https://www.researchgate.net/figure/The-TLS-layers-and-sub-protocols_fig4_321347130