Heim >Java >javaLernprogramm >Warum sendet mein Java-Client sein Zertifikat während des SSL-Handshakes nicht?

Warum sendet mein Java-Client sein Zertifikat während des SSL-Handshakes nicht?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-02 07:34:10602Durchsuche

Why Doesn't My Java Client Send Its Certificate During SSL Handshake?

Warum kann mein Java-Client sein Zertifikat während des SSL-Handshakes nicht übertragen?

Beim Versuch, über Java eine Verbindung zu einem sicheren Webdienst herzustellen stoßen Benutzer häufig auf Handshake-Fehler. Trotz der korrekten Konfiguration von Keystore und Truststore liegt das zugrunde liegende Problem häufig darin begründet, dass Java nicht bereit ist, das Client-Zertifikat während des Handshakes zu übertragen.

Das Problem verstehen:

  1. Der Server erwartet ein von der vertrauenswürdigen RootCA signiertes Client-Zertifikat.
  2. Java durchsucht den Keystore und findet nur das signierte Client-Zertifikat von SubCA, der RootCA selbst vertraut.
  3. Java schaut nicht über den Keystore hinaus und schließt den Truststore von seiner Suche aus.
  4. Aus diesem Grund behauptet Java, dass es keinen hat geeignetes Zertifikat und besteht den Handschlag nicht.

Vorgeschlagen Lösungen:

1. Adresse defekter Zertifikatskette:

Stellen Sie sicher, dass das SubCA-Zertifikat korrekt in den Keystore importiert wurde, ohne die Zertifikatskette zu unterbrechen. Dies kann mit keytool -v -list -keystore store.jks erfolgen. Wenn pro Alias-Eintrag nur ein Zertifikat sichtbar ist, ist die Kette wahrscheinlich unterbrochen.

Zertifikatkette in Keystore importieren:

Um das Problem zu beheben, importieren Sie das Client-Zertifikat und seine gesamte Zertifikatskette im Keystore-Alias ​​zusammenfassen, der den privaten Schlüssel enthält.

2. Konfigurationsproblem auf Serverseite:

Während die Anforderung des Servers nach einem SubCA-signierten Zertifikat angemessen ist, kann die strikte Einhaltung der Anforderung durch Java unnötig restriktiv sein. Es wurde beobachtet, dass Browser wie Chrome und OpenSSL in dieser Hinsicht flexibler sind.

Problemumgehung:

Um das Problem zu umgehen, kann ein alternativer Ansatz verwendet werden:

  1. Exportieren Sie das Client-Zertifikat aus dem Keystore mit keytool -exportcert -rfc -file clientcert.pem -keystore store.jks -alias myalias. Dadurch wird eine PEM-Datei erstellt.
  2. Kombinieren Sie das Client-Zertifikat und das Zwischen-CA-Zertifikat (und optional das Root-CA-Zertifikat) in einer einzigen bundle.pem-Datei.
  3. Importieren Sie das Zertifikatspaket zurück in den Keystore Alias, der den privaten Schlüssel enthält, mit keytool -importcert -keystore store.jks -alias myalias -file bundle.pem.

Das obige ist der detaillierte Inhalt vonWarum sendet mein Java-Client sein Zertifikat während des SSL-Handshakes nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn