SSL kann dem Client Hinweise dazu geben, welches Zertifikat angezeigt werden soll. Diese möglicherweise können Sie einen Schlüsselspeicher mit mehreren Identitäten darin verwenden, aber leider verwenden die meisten Server diese Hinting-Funktion nicht. Daher wird es robuster, wenn Sie das Clientzertifikat angeben, das für jede Verbindung verwendet werden soll.
Hier ist Beispielcode zum Einrichten einer SSLContext
mit angegebenen Identität und Trust Stores. Sie können diese Schritte wiederholen, um mehrere Kontexte zu erstellen, einen für jedes Clientzertifikat, das Sie verwenden möchten. Jeder SSLContext
würde wahrscheinlich den gleichen Truststore verwenden, aber einen anderen Identitätsspeicher (der den einzelnen Clientschlüsseleintrag enthält, der in diesem Kontext verwendet werden soll).
Initialisieren Sie die Kontexte, die Sie einmal benötigen, und verwenden Sie für jede Verbindung das richtige Konnex. Wenn Sie mehrere Verbindungen herstellen, können Sie SSL-Sitzungen nutzen.
KeyManagerFactory kmf =
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(identityStore, password);
TrustManagerFactory tmf =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
Später Sie direkt einen Socket erstellen:
SSLSocketFactory factory = ctx.getSocketFactory();
Socket socket = factory.createSocket(host, port);
Oder, wenn Sie die URL
Klasse verwenden, können Sie die SSLSocketFactory
angeben zu verwenden, wenn HTTPS-Anfragen machen:
Java 6 verfügt über eine zusätzliche API, die das Konfigurieren von Sockets nach Ihren Präferenzen für Cipher Suites usw. erleichtert.
"Java 6 hat einige zusätzliche API, die es einfacher macht, Sockets nach Ihren Präferenzen für Cipher Suites zu konfigurieren" Können Sie mich auf weitere Dokumentation/Diskussion zu diesen Konfigurationen verweisen? – Tazzy531
@ Tazzy531 - Java 6 hinzugefügt ['SSLParameters',] (http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/javax/net/ssl/class-use/SSLParameters. html), die Sie in einer einzigen Operation auf eine 'SSLEngine' oder eine neue' SSLSocket' setzen können. – erickson