什么是证书固定?

证书固定是一种安全技术,实现在建立安全会话时,仅接受已授权或已固定的证书。 使用其他证书建立安全会话的任何尝试都会被拒绝。

证书固定历史记录

证书固定最初旨在阻止中间人 (MITM) 攻击。 证书固定最早在 2011 年因 DigiNotar 证书颁发机构 (CA) 遭受攻击而流行起来,当时的攻击者能够为包括谷歌在内的多个知名网站创建通配符证书。 Chrome 更新为“固定”Google 网站的当前证书,如果提供了其他证书,将拒绝任何连接。 即使攻击者找到了一种方法来说服 CA 颁发欺诈性证书,Chrome 仍会将其识别为无效,并且拒绝连接。

尽管 Chrome 和 Firefox 等 Web 浏览器是最早实现此技术的应用程序,但用例范围迅速扩大。 物联网 (IoT) 设备、iOS 和 Android 移动应用,不同的软件应用程序开始使用此技术来防御中间人攻击。

几年来,证书固定被认为是良好的安全做法。 对公钥基础结构 (PKI) 领域的监督已得到改善,受公众信任的 CA 的颁布做法具有了更多透明度。

如何在应用程序中解决证书固定问题

通常,应用程序包含授权证书或证书属性的列表,包括使用者可分辨名称、指纹、序列号和公钥。 应用程序可能会针对单个叶或最终实体证书、从属 CA 证书甚至根 CA 证书进行固定。

如果应用程序显式指定了可接受 CA 的列表,则你可能需要在证书颁发机构更改或过期时定期更新已固定的证书。 若要检测证书固定,建议执行以下步骤:

  • 如果你是应用程序开发人员,请在源代码中搜索以下任何正在更改或即将过期的 CA 引用。 如果存在匹配项,请更新应用程序以包含缺少的 CA。

    • 证书指纹
    • 使用者可分辨名称
    • 公用名
    • 序列号
    • 公钥
    • 其他证书属性
  • 如果租户客户端应用程序与 Azure API 或其他 Azure 服务集成,但你不确定它是否使用证书固定,请向应用程序供应商核实。

证书固定限制

证书固定的做法广受争议,因为它带来了不可接受的证书敏捷成本。 一个具体的实现,HTTP 公钥固定 (HPKP),已完全弃用

由于没有单一的 Web 标准来说明证书固定的执行方式,我们无法提供检测其使用情况的直接指导。 虽然我们不建议禁止证书固定,但客户应在选择使用它时了解这种做法带来的限制。

后续步骤