面试题答案
一键面试浏览器通过证书验证机制防范中间人攻击的方式
- 证书获取:当浏览器与服务器建立HTTPS连接时,服务器会将数字证书发送给浏览器。
- 基本信息检查:
- 浏览器首先检查证书的有效期,确保证书未过期。
- 检查证书中的域名是否与当前访问的服务器域名匹配,防止证书被用于其他非法站点。
- 证书链验证:
- 根证书信任:浏览器内置了受信任的根证书颁发机构(CA)列表。如果服务器证书是由这些受信任的CA直接颁发的,那么验证相对简单,直接与内置列表对比即可确认其合法性。
- 证书链构建:如果服务器证书是由中间CA颁发的,浏览器需要构建证书链。服务器证书包含颁发者信息,指向中间CA证书。中间CA证书同样包含其颁发者信息,可能指向更高级别的中间CA或根CA。
- 逐一验证:浏览器从服务器证书开始,沿着证书链向上验证。对于每个证书,验证其签名的有效性。签名是由上一级CA使用其私钥对证书内容(如公钥、有效期、主体信息等)进行加密生成的。浏览器使用上一级CA的公钥对签名进行解密,如果解密后的内容与证书内容一致,则签名验证通过,继续验证下一个证书,直到到达根CA。根CA证书的签名由浏览器内置的根CA公钥验证。如果整个证书链验证通过,说明服务器证书是可信的。
可能出现的异常情况及处理
- 证书过期:浏览器会提示用户证书已过期,该连接可能不安全,用户可以选择继续访问(不推荐)或放弃连接。
- 域名不匹配:浏览器会明确提示域名与证书中的域名不一致,这可能是中间人攻击的迹象,用户通常不应继续访问,除非确定这是由于合法原因(如网站配置错误但确实可信任),但这种情况应谨慎处理。
- 证书链验证失败:
- 中间CA不受信任:如果证书链中某个中间CA不在浏览器信任列表中,浏览器会提示证书不受信任。这可能是中间人伪造了一个中间CA证书,用户应停止连接,因为该连接可能已被篡改。
- 签名验证失败:如果某个证书的签名验证失败,同样说明证书可能被篡改,浏览器会显示证书无效的提示,用户应避免继续访问该站点,防止信息泄露或遭受攻击。