Android 和 iOS 中的证书固定

Posted

技术标签:

【中文标题】Android 和 iOS 中的证书固定【英文标题】:Certificate pinning in Android & iOS 【发布时间】:2016-07-01 07:22:01 【问题描述】:

当我们在我们的应用程序中导入 SSL 证书时,对于证书固定,我们必须在每年更新证书时更新 apk/ipa。

我们能克服这个吗!

参考:https://infinum.co/the-capsized-eight/articles/securing-mobile-banking-on-android-with-ssl-certificate-pinning

缺点 灵活性较低 - 当您进行 SSL 证书固定时, 更改 SSL 证书并不容易。对于每个 SSL 证书更改,您必须对应用程序进行更新,将其推送到 Google Play 并希望用户安装它。

请指导克服这个问题。

【问题讨论】:

【参考方案1】:

看看这篇关于证书固定和公钥固定的文章:https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning

一个重要的问题是你想固定什么。如果您不想在每次证书更改时发布新版本,您也可以键入证书的公钥,因为您可以在续订证书时保留相同的公钥,您的应用程序仍然可以使用新证书.

另一个选项不是固定到您的服务器证书,而是固定到 CA 的中间证书或根证书。中间证书的有效期通常更长。

【讨论】:

【参考方案2】:

没有办法克服这个问题,但你可以减轻这种痛苦:

如果您固定锚证书 (CA),则该证书不会经常更改(每 5 年或 10 年)。 与固定证书本身相比,您应该将密钥固定在证书中,该密钥在您重新颁发证书时不会更改。 大多数 pinning 库(例如我使用的那个:https://github.com/datatheorem/TrustKit)允许您指定 pinning 策略的到期日期,以便在您忘记更新 IPA/APK 时,该应用程序仍然适用于您的用户(但禁用了固定,这仍然是相对安全的)。

【讨论】:

太棒了:-)我会研究它并尝试实施并让你知道:-)

以上是关于Android 和 iOS 中的证书固定的主要内容,如果未能解决你的问题,请参考以下文章

证书固定:应用程序从 android 和 ios 的应用程序数据中获取旧证书?

Android / iOS 应用内浏览器上的证书固定

如何防止根设备绕过 Android 中的证书固定?

使用地图、播放服务、分析等的 Android 应用程序中的 SSL 证书固定

如何为公钥固定(SSL 固定)生成 iOS 证书

证书固定不适用于 Android 上的 OkHttp