面试题答案
一键面试证书验证阶段防止中间人攻击的机制
- CA签名验证:
- 客户端收到服务器发送的数字证书,其中包含服务器的公钥等信息。该证书由证书颁发机构(CA)签名。客户端会使用本地信任的CA根证书来验证服务器证书上CA的签名。如果签名验证通过,表明证书是由受信任的CA颁发的,降低了中间人伪造证书的可能性。例如,常见浏览器内置了众多知名CA的根证书,可直接用于验证。
- 证书链验证:
- 服务器证书可能是由中间CA颁发的,而不是直接由根CA颁发。客户端需要从服务器证书开始,沿着证书链向上验证到根CA。每个中间证书必须由其上级CA正确签名,形成一条完整且可信的证书链。只有当整个证书链都验证通过,客户端才会信任服务器证书。
- 证书吊销列表(CRL)和在线证书状态协议(OCSP):
- CRL:CA会发布证书吊销列表,列出已被吊销的证书序列号等信息。客户端可以下载并检查服务器证书的序列号是否在CRL中。如果在,则表明该证书已不可信,可能被中间人冒用。例如,某些CA会定期更新CRL供客户端下载。
- OCSP:是一种实时在线查询证书状态的协议。客户端向OCSP服务器发送证书状态查询请求,OCSP服务器实时返回证书是否有效、吊销等状态信息,相比于CRL能提供更及时的证书状态验证,防止中间人使用已吊销证书进行攻击。
- 证书内容检查:
- 客户端检查证书中的信息,如证书的主题(Subject)是否与访问的服务器域名匹配。如果不匹配,可能是中间人攻击,将用户引导到伪造的服务器。例如,访问
https://example.com
,证书主题中的域名也应该是example.com
。
- 客户端检查证书中的信息,如证书的主题(Subject)是否与访问的服务器域名匹配。如果不匹配,可能是中间人攻击,将用户引导到伪造的服务器。例如,访问
密钥交换阶段防止中间人攻击的机制
- Diffie - Hellman密钥交换:
- 客户端和服务器在Diffie - Hellman密钥交换过程中,各自生成公钥和私钥对。双方交换公钥,然后使用对方的公钥和自己的私钥,通过特定的数学运算(如模幂运算)生成一个共享的会话密钥。由于中间人无法获取双方的私钥,即使截获了公钥,也无法计算出共享密钥,从而防止中间人获取通信密钥。例如,在ECDHE(椭圆曲线Diffie - Hellman密钥交换)中,基于椭圆曲线的数学特性,进一步增强了密钥交换的安全性。
- RSA密钥交换:
- 服务器使用其私钥对一个随机生成的预主密钥(Pre - Master Secret)进行加密,然后发送给客户端。客户端使用服务器证书中的公钥解密得到预主密钥。由于中间人没有服务器的私钥,无法解密该预主密钥,也就无法获取后续生成会话密钥所需的关键信息。之后客户端和服务器基于预主密钥,通过特定算法(如PRF,伪随机函数)生成会话密钥,保证通信的保密性。
- 证书绑定:
- 在密钥交换过程中,服务器的公钥是通过其数字证书提供的。因为在证书验证阶段已经对证书进行了严格验证,所以密钥交换阶段使用的公钥是可信任的,与服务器的身份进行了绑定。如果中间人试图替换公钥,证书验证将失败,从而防止中间人在密钥交换阶段替换公钥来获取通信密钥。