@angcz 首先声明回复针对提问,并不针对提问者,回复中的赞同仅适用于 des 第一条回复的后半句,这里对第一次回复的表达不清晰道歉。 按照您回复中已有的基础,针对问题 1 和问题 2 中网页端的情况,请看 https://www.jianshu.com/p/d23b5ceefe12 这篇证书链开始到最后的部分; 问题 2 中 app 端的问题,eason1874 的回复已经说的很清楚。 问题 3 文中第四步准确的说应该是用服务端公钥加密客户端公钥,然后第五步时服务端私钥解密出客户端公钥并进行验证,所以第八步中中间人并不知道客户端的公钥,此时客户端公钥仅有服务端知道。 再假设即使客户端公钥被中间人知晓,第四步中中间人代替客户端发送的中间人公钥也会在第五步中服务端验证公钥过程中被服务端发现非信任客户端发来的公钥而拒绝服务。可以理解为此时客户端也相当于一个网站,拥有自己的域名证书,而这个证书是由相应的服务端签发的,但中间人的证书并不是服务端签发,所以中间人得不到信任,也就实现了所谓的双向认证过程。 参考链接: https://en.wikipedia.org/wiki/Mutual_authentication 的 Defense 章节中提到:Mutual authentication can prevent MITM attacks because both the sender and recipient verify each other before sending them their message keys, so if one of the parties is not verified to be who they claim they are, the session will end.[9] 以上仅代表我的理解,如有差错敬请指导