作者回复: TLS 使用非对称加密(比如 ECDH)来协商出本次 session 的密钥。问题是客户端如何信任服务器提供的公钥就是服务器本人?此时需要有人对服务器的公钥进行签名,为其背书,这个背书着就是 CA。那 CA 又是谁来背书?小 CA 由大 CA 背书,大 CA 再被 Root CA 背书。全世界也就几个十几个 Root CA。这些 Root CA 会被你所使用的操作系统信任。这样,某个服务器的证书就可以被一层层追溯到 Root CA,最终客户端可以信任它。这是 PKI 体系的基础。所有的网站,如果要支持 HTTPS,都需要有一个受信的证书。以前需要购买,现在有了 letsencrypt(背后有 google 的支持),所以可以免费得到受信的证书。 当你把 TLS 直接用在 TCP 之上时,可以自己生成 CA 证书。因为此刻,客户端和服务端都是你自己的代码,你可以在客户端内置信任的 CA 证书,这样就可以不依赖 PKI 体系来在服务器和客户端之间构建安全信道。
作者回复: 👍