我对 Web 浏览器(如 Firefox/Chrome)验证服务器 SSL 证书的过程有一个疑问。
我阅读了很多关于最大限度地降低攻击者/黑客应用错误颁发的 CA/中间 CA 证书(即被黑客攻击的 CA 或错误地将证书颁发给实际上不应该接收它们的实体)的风险的机制,例如 HPKP HTTP 标头或证书透明度日志。
根据我阅读的解释,潜在的攻击者可能会出示这个错误颁发的证书来冒充终端服务器并劫持来自预期被加密的请求发送者的内容。
但怎么可能呢?浏览器验证证书的机制是什么?
当我使用编程库通过 HTTPS 执行对 API 的请求时,默认情况下会打开一个选项,以将证书中的“主题”字段与我传递来查询服务的 URL 进行比较。如果比较失败,则通信中断。可以绕过此设置(在 Apache HTTP 中称为 NoopHostnameVerifier)。如果我理解得很好,这个功能会导致,如果我拥有域(例如“blablabla.com”)并为域“xyxyxy.xom”提供错误颁发的证书,并带有 CA 的有效签名,Http Client 将由于不匹配而阻止连接具有请求 URL 的证书中的主题。
它在浏览器中是如何工作的?浏览器是否对 x509 证书中的主题和地址栏中的 URL 进行比较?如果不是,为什么浏览器不做这个比较?如果是,浏览器会阻止此请求吗?或者只是发出一些警告?
换句话说:正确验证 CA 的签名是确认证书和整个服务器对证书的响应有效的唯一条件吗?在这种情况下浏览器会忽略 X509 中的“主题”字段和 URL 地址栏之间的不匹配吗?