如何在 iOS 下获取 TrustKit 框架的 SSL pinning 的备份 pin?

How to get a backup pin for TrustKit framework's SSL pinning under iOS?

我目前正在我的 iOS 应用程序中实施 TrustKit framework 来为 SSL 连接启用 SPKI 固定。 我偶然发现了正确的 TrustKit 配置所必需的 "backup pin"。不幸的是,API 文档只说明需要备用 pin,但没有告诉我它应该是什么。信任链如下所示:

GeoTrust Global CA
| GeoTrust SSL CA - G3
   | myServer.com

所以我将 myServer.com-证书的 SPKI 散列固定为主要 pin。我的备用密码是多少?

很遗憾,我没有找到很多关于这个主题的信息。我发现的少数资源之一是来自 PayPal 的 Hubert Le Van Gong this article。他说备用别针:

"Whatever the number of pin values, a backup pin is an absolute must-have. Note that the existence of a backup pin is a mandate in HPKP (i.e. for the web case) but it is equally important in the mobile app space. In both cases, the key pair corresponding to the backup pin should be kept offline until an issue arises with the primary pin/key."

我特别不明白 "should be kept offline" 的部分。

关于pin什么的问题:

根 CA 证书可能是最好的。因此,在我看来,当固定到多个值(例如 2)时,中间 CA – 根 CA 是一种合理的方法。也就是说,只要该证书是根 CA,也可以只固定到单个证书。

由此我了解到我的备份 pin 可能是根 CA(确切地说是 SPKI 哈希)。但是,我想知道中间 CA 甚至根 CA 是如何成为好的引脚的。据我了解,这将验证链中具有此 intermediate/root CA 的每个证书的固定。

我哪里错了?

这是一篇博客 post,其中有一段是关于备用图钉的:https://noncombatant.org/2015/05/01/about-http-public-key-pinning/

具体来说:

You could, and likely should, also use an alternate intermediary or root issuer certificate for your backup. Additionally, it is best to get your backup signed by a valid issuer, before disaster strikes, so that you really can put it into production at a moment’s notice!

对于您的应用程序,您应该固定服务器当前证书的根 CA (GeoTrust Global CA),然后从不同的 CA 购买证书并将另一个 CA 用作备用 pin。固定叶证书 (myServer.com) 需要更多管理工作,因为此证书的密钥将比根证书的密钥更频繁地更改。

此外,关于备份 pin 最重要的是它应该用于完全不同的证书链。

I wonder how an intermediate or even root CA can be good pins. From my understanding this would validate the pinning for every certificate that has this intermediate/root CA in it's chain.

What am I getting wrong here?

你完全没有听错。您选择的固定配置归结为您所接受的安全级别和实用性之间的折衷。有 3 个选项和取舍:

固定到叶证书(最高安全性)

您拥有对一切的完全控制权和所有权,没有任何外部影响可以在不损害您的基础设施的情况下损害您的 SSL。此外,任何一个证书的泄露都不会影响其他证书。

这里的缺点是需要大量敏感的基础设施来颁发、审计、管理和部署几十个证书。假设一家出版商拥有 5,000 个 SSL 证书,涵盖各种杂志和新闻资产。

固定到您拥有的中间 CA(非常高的安全性)

固定到叶证书的好处实际上类似,但如果您的中间证书遭到破坏,则所有颁发的证书都会受到破坏。这是固定大量 SSL 证书的平衡方法。

缺点是获得其中一个非常昂贵。

固定到受信任的根 CA(高安全性)

如果您固定到不属于您的根 CA 或中间 CA,您实际上是将密钥交给该证书的所有者。这 确实 意味着您正在接受根证书或中间证书为您的域颁发的任何证书。然而,现实情况是,这可能足以阻止大多数攻击。成熟的全球权威机构的商业模式以信任为基础。根 CA 不太可能 为您的域颁发恶意证书。

这里有一些缺点:

  1. CA 员工 – rare cases 众所周知,CA 员工会做坏事。
  2. 国家行为者 – 我们不知道政府是否能够让全球当局颁发恶意证书。也许甚至在他们不知情的情况下通过法外国内间谍活动。

最后,最常见的策略往往是固定到 2 或 3 个受信任的证书颁发机构。当任何一个 CA 受到威胁或损坏时,您已经颁发了其他受信任的证书并准备就绪。