最近、バージョン 4.9.0 + Retrofit 2.9.0 を使用して、 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
最初のハッシュのみが変更されます。当然、実装のハッシュが正しくないため、サイトとの通信が機能しなくなると思いますが、他の 3 つは以前と同じであるため、そうではありません。
新しい証明書を作成するときのエラーですか? これは正しい動作ですか、それともエラーですか? チェーン内のすべてのハッシュが正しいことを確認する方法はありますか?