Wie kann ich vor dem Verbinden den Alias ​​des gewünschten Schlüsseleintrags an SSLSocket melden?

8

Ich habe zwei Zertifikat / Schlüssel-Paare in einem Java Keystore. Aliase dieser Schlüsseleinträge sind "foo" und "bar".

Mein TLS-Client (Java-Programm) verwendet den Keystore. Die TLS-Client-Authentifizierung erfolgt während der Verbindungsöffnung. Das Clientprogramm sollte den Schlüsseleintrag "foo" verwenden, wenn das TLS-Serverzertifikat vom Client angefordert wird. Jetzt sendet der Client beim Verbindungs-Handshake ein falsches Zertifikat ("Bar") an den Server.

Wie kann ich vor dem Verbinden Alias ​​des gewünschten Schlüsseleintrags zu SSLSocket sagen?

Derzeit folgt der Code:

%Vor%     
SKi 04.03.2013, 12:09
quelle

1 Antwort

13

Der Standardwert KeyManager sendet das erste gefundene Zertifikat, das den vom Server angeforderten Bedingungen entspricht, dh es sendet das erste gefundene Zertifikat, für das es eine Zertifizierungskette erstellen kann, bis zu einem der gesendeten CA-Namen durch den Server während der Anfrage.

Wenn Sie immer einen bestimmten Alias ​​auswählen möchten, müssen Sie Ihr eigenes X509KeyManager , möglicherweise wird der Standardmanager umgebrochen. Etwas in dieser Richtung sollte funktionieren (nicht getestet diesen tatsächlichen Code, kann es ein paar Tippfehler sein):

%Vor%

Dann verwenden Sie es für Ihre SSLContext :

%Vor%     
Bruno 04.03.2013, 13:25
quelle

Tags und Links