TLS 回顾

166 天前
 GopherDaily

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 and Sign

数据经过加密后(Encrypt), 仅拥有对应密钥的人, 经过解密后可以看到数据的内容. 密钥的形式分为对称密钥和非对称密钥, 非对称密钥下, 常由第三方用公钥对数据进行加密, 随后仅私钥的持有者可以解密对应数据.

摘要(Digest)是指将不定长的数据映射到固定长度, 如 MD5 就会产生 128 比特的字符串. 数据发布者主动公布摘要后, 数据使用者可以按相同规则计算数据的摘要, 通过比对, 校验数据的完整性, 避免使用的数据被篡改.

签名(Sign)是指使用非对称密钥中的私钥计算数据对应签名, 使用者可以使用对应公钥验证数据和签名的关联性, 进而确保数据是由公钥对应方发布或认证的.

TLS 1.2

基于 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 ?.

SNI

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

762 次点击
所在节点    HTTP
4 条回复
julyclyde
166 天前
“诸如 Istio 这样的 Mesh 方案, 会大量使用 SNI 来做路由”
这个是怎么个说法?
tool2d
166 天前
我把 TLS hack 了一下,去掉了 SNI ,直接用 ip 访问网站。原本很多被墙的网站,突然就能访问了,有一种莫名的惊喜感。

当然不是所有的网站都能这样操作,一些网站后台还是很依赖 SNI 做路由的。
GopherDaily
166 天前
@julyclyde
1. 本身你就可以基于 SNI 来配置路由规则
2. Istio 的多集群方案中,跨网络&跨集群的请求是由 Ingress 基于 SNI 来做路由的 https://istio.io/latest/docs/setup/install/multicluster/multi-primary_multi-network/
GopherDaily
166 天前
@tool2d 党国的技术可能就是用握手的第一个包来决定是否 ban 的,我们的网站不小心上了反诈后就是 TLS 直接跪,但是 IP&HTTP 可行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/995871

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX