2016-11-02 3 views

답변

2

OkHttp documentation은 예제 코드로이를 완벽하게 수행 할 수있는 방법을 제공합니다. 사라지면 여기에 붙여 넣습니다.

1. 깨진 내용을 추가하여 CertificatePinner을 요청하십시오. 요청이 존재하지 않더라도 요청할 것입니다. Android 애플리케이션에서이 작업을 수행하거나 더미 Java 애플리케이션을 생성하고이를 실행할 수도 있습니다. 예를 들어

, 깨진 구성으로 시작 https://publicobject.com 핀 :

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 클라이언트 :

예상대로
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(); 

,이 인증서로 고정 예외를 실패 올바르게 :

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(); 

그게 전부입니다!

이 방법은 전체 체인의 모든 인증서를 제공합니다. 이는 체인의 한 인증서 만 성공 요청과 일치해야하므로 안전합니다. 장래에 어느 시점에서 인증서가 업데이트 될 것이지만 전체 체인이 업데이트되지 않는 한 응용 프로그램이 중단되지 않아야합니다.