最近发现我们的网页偶尔会打不开,于是我们在客户端和服务端分别抓取了数据包,发现了一个很奇怪的现象。
在 TLS 通信过程中,客户端向服务器发送了“client hello”,然后服务器回复了“server hello and certificate”,客户端确认了。但是随后在服务器端捕获的数据包显示服务器端发送了“server key exchange and server hello done”消息,而客户端捕获的数据包中并没有出现这个消息。这可以解释为什么我们的网页无法打开,因为客户端正在等待“server hello done”消息。然而,在服务器端捕获的数据包中,“server key exchange”数据包被客户端确认了。我对这个问题很困惑。谁确认了“server key exchange”数据包?这是不是中间人攻击?
答案1
如果服务器发送“ServerHelloDone”消息而不执行服务器密钥交换,则表明服务器正在使用不需要显式服务器密钥交换的密码套件。在某些情况下可能会出现这种情况,例如:
RSA 密钥交换:在某些情况下,服务器的公钥已经嵌入其证书中,无需额外的服务器密钥交换消息。客户端可以从证书中提取服务器的公钥并将其用于密钥交换和加密。