本系列文章包含以下内容
- 单向TLS不认证,客户端不检查服务端证书的有效性
- 单向TLS认证,客户端检查服务端证书的有效性
- 双向TLS认证,服务端验证客户端证书的有效性
- 升级协议,在通信过程中升级成TLS通信
本系列文章中大写C
统一表示客户端,大写S
表示服务器端。
简介
TLS(Transport layer layer)是一种安全协议,目的为互联网通信提供安全及完整性保障
定义摘自维基百科。
完整性保障很容易理解,C
(客户端)与S
(服务器端)通信,客户端发出信息[转10000给张三
],经过网络传输后,由于网络丢包变成了[转100块给张三
],客户端估计会被张三揍哭。因此服务端(收到信息的一方)需要保证收到的信息确实一丝一毫都没变。这就是完整性。
保证完整性通常通过哈希值来实现。比如我们可以设计一种弱鸡的算法,计算字数的个数作为哈希,那么信息变成了[转10000块给张三,10
],其中10就是哈希值,那么如果服务端收到的信息是[转100块给张三,10
],服务端检查到哈希值不正确就知道消息在传输过程中发生了错误。然而如果信息变成了[转20000块钱给张三,10
],这个弱鸡算法就不能帮助服务器检查到这个错误。因此哈希算法基础的要求就是碰撞(给定信息1,构造另一段信息2,使得2的哈希值与1相等)的难度。
什么是安全性呢