"在 server hello 后服务端会选择一个加密方案,双向认证时候,加密套件在客户端验证完服务端证书后发送??" 不是,是一起发送的。你可以看 6 楼的文章里的 curl 输出,第一行是客户端证书,第二行是加密套件里的 key(也就是双方随机数计算的 pre-master secret),第三行是用客户端密钥计算的 hash 校验,防中间人篡改,三个包是连续一起发送的。 如果客户端证书没问题,那么服务器直接就 SSL 握手完成了,不会再次请求加密 KEY 。 * TLSv1.2 (OUT), TLS handshake, Certificate (11): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS handshake, CERT verify (15):
我理解的, 单向的 https 中, 只有客户端,校验服务端是否是正确的(一般来说,会校验域名和证书是否一致) 在双向认证的 https 中, 不光客户端校验服务端, 服务端也会校验客户端是否靠谱(使用服务端保存的客户端根证书来校验客户端发来的公钥)