两个独立的问题。 1. 你描述中的第一句,只在部分条件下适用。TLS 1.2 之前是支持 PSK 方式的预共享密钥。TLS 1.2 及之后只支持密钥协商。 2. 双向校验的核心是,HTTPS 的安全是建立在对于 CA 机构证书链的信任。双向校验的核心是,服务端只信任预置证书的客户端,客户端只信任指定的 CA 证书。
@zbowen66 @FaiChou 两位尊父大人给的文章有出入,zbowen66 大人的图在第一步 client hello 时候发送了加密套件,并在 server hello 时候返回了明文的加密套件选择方案; FaiChou 大人的文章再 client 校验完 server 证书时候将加密套件发送给 server ,server 校验完 client 证书后将选择的方案用 client 公钥加密了 以上就是我一直纠结的点
@main1234 似乎你的纠结点在于服务器用了客户端证书,具体干嘛。 1. 客户端角度看,证书分公钥和私钥两部分。公钥是发给服务器作为验证的,私钥确实是本地加密数据后发给服务器,但不是加密 random 随机数,也不是 masterkey ,就仅仅是加密了 hash (因为正式加密通讯之前,任何数据都有可能被篡改,需要数字签名) 2. 图上有一个 change cipher spec ,名字很容易误导,你以为可能是二次协商密钥。其实包里啥也没干,就是一个加密开始的 confirm 。