【发布时间】: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