이 질문은 How can I pin a certificate with Square OKHTTP?과 중복 될 수 있습니다. 그러나 명확하지 않아서 다시 묻습니다. 내 http 클라이언트에 SSL 인증서를 첨부해야합니다. 추가 버전을 사용하고 있습니다. 2.2.0
및 okHttp 버전 3.6.0
okHttp로 고정 된 인증서
인증서는 .crt
형식입니다. 현재 나는 as shown here이라는 고정 된 인증서를하고 있습니다. 그러나 나는 그것이 옳은 것인지 알지 못한다. 다음은 내 코드
static void pinCertificate(Context context, OkHttpClient.Builder builder) {
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream cert = context.getResources().openRawResource(R.raw.certificate);
Certificate ca;
ca = cf.generateCertificate(cert);
// creating a KeyStore containing our trusted CAs
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
builder.sslSocketFactory(sslContext.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
}
}
이 okHttp와 .crt
인증서를 고정하는 적절한 방법이다? 제대로 악수를하고 있는지 어떻게 테스트 할 수 있습니까? 누군가가 샘플 코드를 표시하여 인증서를 올바르게 고정시킬 수 있습니까? 일부 샘플 및 문서를 보았습니다. https://medium.com/@develodroid/android-ssl-pinning-using-okhttp-ca1239065616
하지만 구현 한 것과 완전히 다릅니다. 아무데도 crt
파일을 사용하지 않았습니다.
누군가가 인증서 고정에 대한 더 나은 설명을 공유하고 okhttp에서 어떻게 수행 할 수 있는지 알게되면 매우 유용 할 것입니다. 미리 감사드립니다 !!
귀하의 코드는 자체 서명 인증서를 지원하기위한 것입니다. 인증 기관에서 일반 인증서의 인증서 고정을 원한다면 링크 할 중간 게시물을 사용해도됩니다. – CommonsWare
'crt' 파일은 자체 서명 인증서를 의미합니까? – Jrd
반드시 그렇지는 않습니다. 자체 서명 된 인증서인지 아닌지 웹 사이트를 관리하는 사람에게 물어보십시오. – CommonsWare