【问题标题】:Dynamic certificate pinning动态证书固定
【发布时间】:2016-09-14 19:56:46
【问题描述】:

我有一个 iOS 应用程序,它将分发给多个客户,每个客户都使用自己的网络基础设施。我想添加一些证书固定功能,但我需要以动态方式执行此操作,因为我无法发布捆绑了 cert/pubkey 的应用程序,因为这样做需要为每个客户进行不同的构建。

我的想法是在应用启动时查询每个客户端配置的 HTTPS 服务器,获取证书,可能提取公钥,然后将其固定。

是否可以在 Swift 或 Objective-C 中做到这一点?我一直无法找到相关的代码示例或文档。

【问题讨论】:

  • 你试过 SSLPinningMode 吗? this 可能会有所帮助。如果您打算在应用商店上分发它,我怀疑它会被接受(关于下载和提取证书的部分)。
  • 这是一个来自 iOS Pushing the Limits 的示例:github.com/iosptl/ios7ptl/blob/master/ch14-Security/Connection/…。看看RNSecTrustEvaluateAsX509。它包括从连接中提取证书的代码。然后,您可以将证书写入文件,然后使用标准固定做法,例如 github.com/rnapier/RNPinnedCertValidator
  • 不相关的元垃圾,但@RobNapier 您是否计划发布新版本的推动 iOS 10 的极限?
  • @JAL 没有。我无法想象这个头衔会在当前市场继续存在。与传统出版商合作太难了,而且购买它们的人太少了。可能会与一个较小的出版商合作,但这将是另一种类型的书。感谢您的提问。

标签: ios objective-c swift ssl pinning


【解决方案1】:

在操作上,如果您在应用程序中嵌入证书或密钥,管理和从错误配置中恢复会容易得多。如果您只是固定服务器第一次发送给应用程序的任何证书,那么一旦当前证书过期或轮换,您就没有支持新证书的机制。如果这仍然是您想做的事情,我建议您查看 HPKP 规范,该规范实现了相同的机制,但针对浏览器:https://www.rfc-editor.org/rfc/rfc7469

此外,如果应用程序服务器不受您的直接控制,那么如果服务器的证书意外更改,则固定最终会导致应用程序变砖。构建应用程序的团队是否会被告知应用程序/客户服务器上的基础架构/证书更改,以便他们可以及时发布更新?如果没有,你不应该这样做。

【讨论】:

  • 我刚刚赞成这个答案。我意识到这并不是张贴者所要求的,但这个答案非常有用,并指出了做张贴者建议并提供额外信息的危险。根据帮助部分,这篇文章“很有趣、经过充分研究且很有用”。
【解决方案2】:

这是可能的。我自己没试过,但我想你正在寻找这样的东西。

https://github.com/wultra/ssl-pinning-ios

【讨论】:

    猜你喜欢
    • 2019-10-03
    • 2018-10-28
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2019-10-03
    • 2018-12-12
    • 2020-11-10
    相关资源
    最近更新 更多