当两台计算机建立 HTTPS 连接时,它们必须解决要使用什么密钥,对吗?
因此,要做到这一点,密钥在某个时刻必须以未加密的形式从一台计算机传输到另一台计算机,不是吗?那时,中间人是否能够嗅探到它并获取密钥,然后他就可以用它来读取/写入加密数据包?
HTTPS 协议如何避免这种情况?
答案1
SSL 使用两个密钥,一个是私钥,一个是公钥。只有公钥会被发送,除非你知道私钥,否则这个密钥没有任何意义。
每一方都用另一方的公钥加密其发送的数据(这有点复杂,但您明白了)。只有接收方能够(轻松)解码流量。
这意味着流量嗅探并不是什么大问题,尽管暴力攻击当然取决于所使用的密钥大小和算法。
基于流量拦截和服务器替换的中间人攻击风险较高,但通常可以通过使用受信任的证书颁发机构来预防。但是,如果您忽略浏览器在服务器证书与网站名称不匹配或未由受信任的颁发机构链颁发时显示的警告(例如:自签名证书),则可避免中间人攻击。
答案2
HTTPS/SSL 协议使用私钥/公钥来确保安全连接。 http://en.wikipedia.org/wiki/Transport_Layer_Security