OkHttp 证书固定错误或默认行为?
OkHttp Certificate pinning Error or default behavior?
最近,我一直在使用版本 4.9.0 + Retrofit 2.9.0 测试 certificate pinning implementation provided by 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
如果我们更改证书并使用与以前相同的提供商 and/or 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 会很高兴。
这意味着您可以在以下任一操作事件中幸存下来:
- 更改您的证书颁发机构(您的组织 public 密钥保持不变)
- 丢失您的 public 密钥并将其关闭(CA 保持不变)
但是,如果您更改证书颁发机构并获得新的 public 密钥,则在您更新其 PIN 之前,客户端将无法连接。
最近,我一直在使用版本 4.9.0 + Retrofit 2.9.0 测试 certificate pinning implementation provided by 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
如果我们更改证书并使用与以前相同的提供商 and/or 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 会很高兴。
这意味着您可以在以下任一操作事件中幸存下来:
- 更改您的证书颁发机构(您的组织 public 密钥保持不变)
- 丢失您的 public 密钥并将其关闭(CA 保持不变)
但是,如果您更改证书颁发机构并获得新的 public 密钥,则在您更新其 PIN 之前,客户端将无法连接。