Ich habe ein selbstsigniertes Client-Zertifikat-Kit erhalten, das verwendet werden soll, um über HTTPS auf einen Server zuzugreifen. Das Kit besteht aus folgenden PEM-Dateien:Wie erstellt man eine SSLSocketFactory aus PEM-Zertifikat und Schlüssel, ohne in Keystore zu konvertieren?
- client.crt (Client-Zertifikat)
- client.key (Client private Schlüssel)
- ca.crt (CA-Zertifikat)
One Weg, um die Aufgabe zu lösen, ist ein Java-Schlüsselspeicher zu generieren:
openssl- Verwenden zu konvertieren Client-Zertifikat und Schlüssel zu PKCS12 Keystor
- Verwenden keytool CA-Zertifikat in den Laden zu importieren
... und dann Code wie den folgenden verwenden SSLSocketFactory Instanz zu bauen:
InputStream stream = new ByteArrayInputStream(pksData);
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(stream, password);
KeyManagerFactory kmf = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, password.toCharArray());
KeyManager[] keyManagers = kmf.getKeyManagers();
TrustManagerFactory tmfactory = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
tmfactory.init(keyStore);
TrustManager[] trustManagers = tmfactory.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, trustManagers, null);
sslSocketFactory = sslContext.getSocketFactory();
..., die später verwendet wird, um die init http-Bibliothek.
So erhalten wir einen KeyStore, dann init KeyManagers und TrustManagers mit seiner Hilfe und schließlich erstellen wir SSLSocketFactory-Instanz mit ihnen.
Die Frage ist: Gibt es eine Möglichkeit, dass die Schlüsselspeicherdatei Schöpfung zu vermeiden und irgendwie SSLSocketFactory baut mit PublicKey und Certificate-Instanz starten (die zum Beispiel aus PEM-Dateien mit bouncycastle des PemReader erhalten werden)?
Nr genommen Sie haben eine PKCS # 12 oder JKS Schlüsselspeicher zu bauen. Aber du hättest keinen privaten Schlüssel bekommen sollen. Du hättest alles selbst generieren sollen. Hier besteht ein ernsthaftes Sicherheitsproblem. Dein privater Schlüssel ist nicht privat, also wer immer er dir gab, kann dich im juristischen Sinne verkörpern. Tu das nicht. – EJP
Ja, danke, wir wissen, dass wir selbst private Schlüssel generieren sollten. Aber die Institution, mit der wir hier arbeiten, diktiert ihre Regeln und hört niemandem zu: Sie erzeugen nur alle Schlüssel selbst. Es ist jedoch keine technische Angelegenheit. –