Secure Sockets Layer(SSL) 是网景(Netscape) 在 1995 年提出的一种安全加密协议, 包括 1.0, 2.0 和 3.0 三个版本.
Transport Layer Security(TLS) 是由 IETF 主导的, 对 SSL 的更新. TLS 的初始版本和 SSL 3.0 基本相同. TLS 1.2/1.3 是当前的主流版本, 1.3 相对 1.2 在安全和性能上都有明显的提高.
数据经过加密后(Encrypt), 仅拥有对应密钥的人, 经过解密后可以看到数据的内容. 密钥的形式分为对称密钥和非对称密钥, 非对称密钥下, 常由第三方用公钥对数据进行加密, 随后仅私钥的持有者可以解密对应数据.
摘要(Digest)是指将不定长的数据映射到固定长度, 如 MD5 就会产生 128 比特的字符串. 数据发布者主动公布摘要后, 数据使用者可以按相同规则计算数据的摘要, 通过比对, 校验数据的完整性, 避免使用的数据被篡改.
签名(Sign)是指使用非对称密钥中的私钥计算数据对应签名, 使用者可以使用对应公钥验证数据和签名的关联性, 进而确保数据是由公钥对应方发布或认证的.
基于 RSA 交换密钥的 TLS 握手流程如下, 常见于 TLS 1.2:
客户端确认服务端身份依赖于 Certificate Authority (CA), 即证书颁发机构. 其工作机制可以简单的理解为:
基于 RSA 的密钥交换中, 由客户端生成 pre-master secret 后, 使用服务端的公钥加密后传输给服务端. 理论上, 仅服务端使用严密保护的私钥可以解密这部分数据获取到 pre-master secret. 随后, 客户端和服务端用 pre-master secret, 客户端随机数和服务端随机数生成相同的密钥, 用于后续数据的对称加解密.
TLS 1.3 相较于 TLS 1.2 在安全性和握手效率上都要较大的提高, 具体可以参考 为什么要使用 TLS 1.3 ?.
Server Name Indication (SNI) 是 TLS 的一个扩展, 允许客户端在 ClientHello 中指定想要连接的主机名. SNI 主要用于同一 IP 的服务器承载多个主机名的场景.
诸如 Istio 这样的 Mesh 方案, 会大量使用 SNI 来做路由.
Source: https://github.com/j2gg0s/j2gg0s/blob/main/_posts/2023-11-27-TLS%20%E5%9B%9E%E9%A1%BE.md
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.