Certificate 如何使用OkHttp启用证书固定

Certificate 如何使用OkHttp启用证书固定,certificate,ssl-certificate,okhttp,okhttp3,Certificate,Ssl Certificate,Okhttp,Okhttp3,如何在我的Android/Java应用程序中使用OkHttp启用证书固定?通过示例代码为我们提供了一种明确的方法。如果它消失了,则粘贴在下面: 1。添加一个损坏的证书管理员并提出请求。 任何请求都可以,即使它不存在。您可以在Android应用程序中执行此操作,也可以创建一个虚拟Java应用程序并运行它 例如,要锁定,请从断开的 配置: String hostname = "publicobject.com"; CertificatePinner certificatePinner = new C

如何在我的Android/Java应用程序中使用OkHttp启用证书固定?

通过示例代码为我们提供了一种明确的方法。如果它消失了,则粘贴在下面:

1。添加一个损坏的
证书管理员
并提出请求。
任何请求都可以,即使它不存在。您可以在Android应用程序中执行此操作,也可以创建一个虚拟Java应用程序并运行它

例如,要锁定,请从断开的 配置:

String hostname = "publicobject.com";
CertificatePinner certificatePinner = new CertificatePinner.Builder()
    .add(hostname, "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")
    .build();
OkHttpClient client = OkHttpClient.Builder()
    .certificatePinner(certificatePinner)
    .build();

Request request = new Request.Builder()
    .url("https://" + hostname)
    .build();
client.newCall(request).execute();
正如预期的那样,此操作失败,出现证书固定异常:

javax.net.ssl.SSLPeerUnverifiedException: Certificate pinning failure!
   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
   Pinned certificates for publicobject.com:
     sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
   at okhttp3.CertificatePinner.check(CertificatePinner.java)
   at okhttp3.Connection.upgradeToTls(Connection.java)
   at okhttp3.Connection.connect(Connection.java)
   at okhttp3.Connection.connectAndSetOwner(Connection.java)
2。正确配置OkHttp客户端:

CertificatePinner certificatePinner = new CertificatePinner.Builder()
    .add("publicobject.com", "sha256/afwiKY3RxoMmLkuRW1l7QsPZTJPwDS2pdDROQjXw8ig=")
    .add("publicobject.com", "sha256/klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY=")
    .add("publicobject.com", "sha256/grX4Ta9HpZx6tSHkmCrvpApTQGo67CYDnvprLg5yRME=")
    .add("publicobject.com", "sha256/lCppFqbkrlJ3EcVFAkeip0+44VaoJUymbnOaEUk7tEU=")
    .build();
就这些

此方法将为您提供整个链中的所有证书。这是有利的,因为它更安全,因为链中只有一个证书必须匹配请求才能成功。很可能在将来的某个时候,您的证书会被更新,但只要整个链没有更新,您的应用程序就不会中断