Heim >Java >javaLernprogramm >Warum schlägt mein Java-SSL-Handshake fehl, wenn der Server ein von einer anderen Zertifizierungsstelle signiertes Client-Zertifikat anfordert?

Warum schlägt mein Java-SSL-Handshake fehl, wenn der Server ein von einer anderen Zertifizierungsstelle signiertes Client-Zertifikat anfordert?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-29 05:36:13557Durchsuche

Why Does My Java SSL Handshake Fail When the Server Requests a Client Certificate Signed by a Different CA?

Auslassen des Client-Zertifikats beim Java SSL-Handshake

Das Verhalten von Java bei SSL-Handshakes kann manchmal dazu führen, dass das Client-Zertifikat weggelassen wird, was zu einem Handshake führt Misserfolge. Dieses Problem tritt auf, wenn der Server ein von einer bestimmten Zertifizierungsstelle (in diesem Fall „RootCA“) signiertes Client-Zertifikat anfordert und Java im Keystore nur ein von einer untergeordneten Zertifizierungsstelle („SubCA“) signiertes Client-Zertifikat findet.

Überlegungen zur Keystore-Konfiguration:

  1. Unterbrechung der Zertifikatkette: Das ist möglich Das Importieren des „SubCA“-Zertifikats in den Keystore hat möglicherweise die Zertifikatskette unterbrochen, was dazu geführt hat, dass der KeyManager nur das Client-Zertifikat erkennt.
  2. Zertifikatszuordnung: Das „SubCA“-Zertifikat sollte mit verknüpft sein der Alias, der das Client-Zertifikat und seinen privaten Schlüssel im Keystore enthält. Diese Zuordnung kann mit keytool -v -list -keystore store.jks überprüft werden.

Überlegungen zur Serverkonfiguration:

  1. Zertifizierungsstelle Diskrepanz: Idealerweise sollte der Server ein von der „SubCA“ signiertes Client-Zertifikat anfordern, da dies die vertrauenswürdige Autorität ist, die dem Client bereitgestellt wird. Allerdings kann Javas strikte Einhaltung der Zertifikatkettenüberprüfung in diesem Szenario zu Handshake-Fehlern führen.

Workaround-Lösung:

Um dieses Problem zu beheben, muss das Client-Zertifikat verwendet werden und seine Zertifikatskette (einschließlich des „SubCA“-Zertifikats) sollte in einer einzigen Datei (z. B. bundle.pem) zusammengefasst werden. Diese gebündelte PEM-Datei kann dann mithilfe von keytool -importcert -keystore store.jks -alias myalias -file bundle.pem in den Keystore-Alias ​​importiert werden, der den privaten Schlüssel des Clients enthält. Dadurch erkennt Java die komplette Zertifikatskette und sendet beim SSL-Handshake das entsprechende Zertifikat.

Das obige ist der detaillierte Inhalt vonWarum schlägt mein Java-SSL-Handshake fehl, wenn der Server ein von einer anderen Zertifizierungsstelle signiertes Client-Zertifikat anfordert?. 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