【问题标题】:SHA-256 certificate pinning isn't workingSHA-256 证书固定不起作用
【发布时间】:2021-11-17 01:20:13
【问题描述】:

我在证书固定方面遇到了一个奇怪的问题。

如果我使用带有原始证书的 network-security-config xml,它可以工作。但是如果我在同一个文件中切换到 sha256 固定,它就不起作用o_O

我检查了 10 次是否使用了正确的 sha256。甚至 okhttp 证书 pinner(我从中迁移到 network-security-config xml)也向我显示了相同的 sha256,所以它是 100% 正确的。

有人知道发生了什么吗? :)

【问题讨论】:

  • “不起作用”是什么意思?有例外吗?您要删除信任锚证书吗?固定和信任锚是不同的东西。信任锚扩展了有效证书的集合,而固定将其严格缩减为包含该证书的链。
  • @YuriSchimke 是的,在第一次尝试时,我评论了 pin-set 部分(就像在屏幕截图上一样)并且我的请求有效。但是,如果我评论 trust-anchors 部分(并注释掉 pin-set 部分),我的请求将返回“javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certificate path not found.”
  • @YuriSchimke “信任锚扩展了有效证书的集合,而固定将其严格缩减为包含该证书的链。” - 是的,但据我了解,如果我的证书是由受信任的系统 CA 颁发的(并且确实如此),则固定应该在没有信任锚部分的情况下工作
  • 从您的第一个答案来看,默认根 CA 可能不支持您的证书。在 ssllabs.com/ssltest 上进行测试,看看它对 Android 的影响。
  • @YuriSchimke 感谢您的帮助,ssllabs 显示来自服务器的证书不包含中间证书,这就是 android 不信任它的原因。实际上,官方 android 文档 developer.android.com/training/articles/security-ssl#MissingCa 已经描述了这种问题

标签: android okhttp pinning certificate-pinning


【解决方案1】:

从您的第一个答案来看,默认根 CA 可能不支持您的证书。在 ssllabs.com/ssltest 上进行测试,看看它对 Android 的影响。

正如您所确认的,服务器没有将完整的链发送到根,因此缺少中间体导致失败。在这种情况下,其他一些客户端会下载丢失的证书,但不会下载 Android。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多