对于传输的第一个数据包来说 https 真的安全吗?
我不太了解它是如何工作的,但我知道传输的第一个数据包没有加密,否则我的电脑怎么知道如何加密发送的数据和解密接收的数据呢?
那么,如果攻击者拦截第一个数据包,就足以扰乱我的电脑或远程帐户吗?
密钥(至少不是在 https 连接开始时同时收到的,并且来自另一个站点)是唯一更安全的方法吗?使用至少另一个 IP 获取此密钥是最好的吗?或者可以通过移动设备获取密钥并使用另一个有线连接登录?
或者我完全错了,如果是这样,为什么?
答案1
我不太了解它是如何工作的,但我知道传输的第一个数据包没有加密,否则我的电脑怎么知道如何加密发送的数据和解密接收的数据呢?
第一个数据包确实没有加密,但它还没有传输 HTTP 数据——它是一个密钥交换数据包。在每次连接开始时,TLS 使用密钥交换算法让双方生成相同的加密密钥,而无需实际将其传输给对方。密钥交换完成后,两个系统现在都有一个加密密钥,被动攻击者(仅监视您的流量)无法知道。(维基百科文章Diffie-Hellman 密钥交换说明了其工作原理。
(除了 DH 之外还有其他密钥交换机制,比如让一方向另一方发送 RSA 加密密钥,但这些机制大多已过时 - TLS 和 SSH 现在始终使用 DH。)
您说得对,主动攻击者可以拦截并替换这些密钥交换数据包,但这就是 HTTPS(TLS)证书旨在防止。服务器使用自己的 DH 参数加上其 TLS 证书进行响应,并且它迹象使用证书私钥的所有密钥交换参数。(这还包括从客户端收到的第一个数据包,以确保客户端发送的内容与服务器收到的内容完全一致。)
如果签名检查成功,客户端就会知道 1)它正在与已颁发证书的服务器通信(其他任何人都不会拥有私钥),2)服务器的答复尚未被攻击者替换(攻击者无法替换签名),3)客户端的初始数据包也未被攻击者替换(因为服务器看到的数据已包含在签名的内容中)。
密钥(至少不是在 https 连接开始时同时收到的,并且来自另一个站点)是唯一更安全的方法吗?使用至少另一个 IP 获取此密钥是最好的吗?或者可以通过移动设备获取密钥并使用另一个有线连接登录?
对于 HTTPS(一般为 TLS),通常不需要这样做;服务器的证书用于证明密钥交换未被篡改。您已经有第三方(向服务器颁发证书的 CA(认证机构))在颁发证书期间验证其域名,通常确实使用多个连接;只要您信任(所有)CA 能够正确执行此操作,就不需要额外的验证。
(当然,您仍然需要以安全的方式至少获取 CA 的“根”证书 - 这就是为什么它们包含在您的操作系统中,并且希望您以安全的方式获取操作系统。)
但其他一些协议(如 SSH)通常不使用 CA,在这种情况下做您需要自己采取类似的步骤。SSH 也以与 TLS 几乎相同的方式使用密钥交换,但要求您在初始连接期间手动检查服务器的证书(客户端会记住以供以后使用),这通常是通过为第一次连接使用“更安全”的网络来完成的……或者通过 HTTPS 发布证书指纹。