微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OkHttp 证书固定错误或默认行为?

如何解决OkHttp 证书固定错误或默认行为?

最近,我一直在使用版本 4.9.0 + Retrofit 2.9.0 测试 certificate pinning 提供的 OkHttp 实现;而且我注意到哈希检查不是连接的而是分离的。

根据示例实现publicobject.com的证书链:

Peer certificate chain:
    sha256/afwiKY3RxoMmLkuRW1l7QsPZTJPwDS2pdDROQjXw8ig=: CN=publicobject.com,OU=PositiveSSL
    sha256/klO23nT2ehFdxcfx3eHTDRESMz3asj1muO+4aIdjiuY=: CN=COModo RSA Secure Server CA
    sha256/grX4Ta9HpZx6tSHkmCrvpApTQGo67CYDnvprLg5yRME=: CN=COModo RSA Certification Authority
    sha256/lCppFqbkrlJ3EcVFAkeip0+44VaoJUymbnOaEUk7tEU=: CN=AddTrust External CA Root

如果我们更改证书并使用与以前相同的提供程序和/或根,我们会得到如下结果:

Peer certificate chain:
    sha256/dklfnskvAAQFvandjfjASAFjvjvg45nbwskdvur5548=: CN=publicobject.com,OU=PositiveSSL
    sha256/klO23nT2ehFdxcfx3eHTDRESMz3asj1muO+4aIdjiuY=: CN=COModo RSA Secure Server CA
    sha256/grX4Ta9HpZx6tSHkmCrvpApTQGo67CYDnvprLg5yRME=: CN=COModo RSA Certification Authority
    sha256/lCppFqbkrlJ3EcVFAkeip0+44VaoJUymbnOaEUk7tEU=: CN=AddTrust External CA Root

只有第一个哈希值发生变化,我自然会假设与站点的通信应该停止工作,因为我们的实现现在有一个不正确的哈希值,但事实并非如此,因为其他三个与以前相同。

是我创建新证书时的错误吗? 这是正确的行为还是错误? 有没有办法检查链中的所有哈希值是否正确?

解决方法

那个特定的握手涉及 4 个证书,如果任何与您的签名之一匹配,OkHttp 会很高兴。

这意味着您可以在以下任一操作事件中幸存下来:

  • 更改您的证书颁发机构(您的组织公钥保持不变)
  • 丢失公钥并将其切换出去(CA 保持不变)

但是,如果您更改了证书颁发机构并获得了新的公钥,则在您更新其 pin 之前,客户端将无法连接。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。