Diese Frage kann ein Duplikat von How can I pin a certificate with Square OKHTTP? sein Aber da es nicht klar ist, frage ich noch einmal. Ich muss ein SSL-Zertifikat an meinen http-Client anhängen. Ich benutze Retrofit Version 2.2.0
und okHttp Version 3.6.0
Zertifikat pinning mit okHttp
Ich habe ein Zertifikat in .crt
Format. Derzeit mache ich das Zertifikat pinning as shown here. Aber ich weiß es nicht oder nicht. Im Anschluss an meinem Code
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();
}
}
Ist es der richtige Weg, um ein .crt
Zertifikat mit okHttp zu? Wie können wir testen, ob es den Handshake richtig macht? Wenn es falsch ist, kann jemand einen Beispielcode zeigen, um das Zertifikat richtig anzuheften? Ich sah einige Proben und Dokumente wie diese https://medium.com/@develodroid/android-ssl-pinning-using-okhttp-ca1239065616
aber es ist völlig anders als was ich implementiert habe. Nirgendwo haben sie eine crt
Datei verwendet.
Wenn jemand eine bessere Erklärung über Certificate Pinning und wie es in okHttp getan werden kann, wäre es sehr hilfreich. Vielen Dank im Voraus !!
Ihr Code ist für die Unterstützung eines selbstsignierten Zertifikats, das mehr als nur Pinning erfordert. Wenn Sie ein Standardzertifikat von einer Zertifizierungsstelle mit einem Zertifikat versehen möchten, ist der Medium-Post, zu dem Sie eine Verknüpfung herstellen, in Ordnung. – CommonsWare
'crt' Datei bedeutet, dass es ein selbstsigniertes Zertifikat ist? – Jrd
Nicht unbedingt. Fragen Sie, wer Ihre Website verwaltet, ob dies ein selbstsigniertes Zertifikat ist oder nicht. – CommonsWare