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 的应用程序数据中获取旧证书?