Gegenseitige Authentifizierung zwischen zwei Diensten mit demselben Zertifikat auf demselben Computer

Nov 26 2020

Ich habe einen einfachen Spring Boot Service ( service A), bei dem eine REST-API verfügbar ist. Zum Hinzufügen von https-Unterstützung habe ich dasselbe Zertifikat verwendet, das für einen anderen Dienst ( service B) ausgestellt wurde, der sich in derselben Box befindet. Hier ist meine application.properties-Datei

server.ssl.enabled=true
server.ssl.client-auth=need
server.ssl.key-store=keystore.jks
server.ssl.key-store-password=password
server.ssl.key-store-type=JKS
server.ssl.trust-store-password=password
server.ssl.trust-store=keystore.jks
server.ssl.trust-store-type=JKS

Dies scheint zu funktionieren, wenn die Verbindung zu service Aeinem Client hergestellt wird, der dies nicht ist service B. Ich habe die gegenseitige Authentifizierung zwischen Diensten aktiviert, damit das Client-Zertifikat validiert wird. Wenn eine Anfrage von Bbis gestellt wird A, erhalte ich eine Fehlermeldung

javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
        at sun.security.ssl.Alert.createSSLException(Alert.java:131)
        at sun.security.ssl.Alert.createSSLException(Alert.java:117)

Nachdem ich das SSL-Debug aktiviert hatte, stellte ich fest, dass dieser Fehler dies verursacht

upcoming handshake states: server finished[20]
*** Certificate chain
<Empty>
***
https-jsse-nio-8090-exec-4, fatal error: 42: null cert chain

Ich habe überprüft und erneut überprüft, ob der Keystore und der Truststore richtig eingestellt sind, aber kein Glück. Gibt es eine Möglichkeit, dies mit Server und Client mit demselben Zertifikat zum Laufen zu bringen? Schätzen Sie alle Hinweise, wie ich es zum Laufen bringen kann (mit demselben Zertifikat), mit dem ich seit einer Woche zu kämpfen habe.

Antworten

1 SusanMustafa Nov 26 2020 at 03:36

Enthält Ihr JKS die gesamte Kette? Wenn Sie nach innen schauen, haben Sie die gesamte Kette bis zum Stammzertifikat?

Der Fehler sagt Ihnen, dass die Kette nicht gefunden werden kann. Ihr Zertifikat ist wahrscheinlich selbst signiert? oder Ihr JKS hat nicht die volle Kette.

Siehe ähnliche Stackoverflow-Frage: CamelJettyWebSocketServer, schwerwiegender Fehler: 42: Null-Zertifikatskette