Wzajemne uwierzytelnianie między dwiema usługami z tym samym certyfikatem na tym samym komputerze

Nov 26 2020

Mam prostą usługę rozruchu sprężynowego ( service A), która ma ujawniony interfejs API REST. Aby dodać obsługę protokołu HTTPS, użyłem tego samego certyfikatu, który jest wystawiany dla innej usługi ( service B) znajdującej się w tym samym polu. Oto mój plik application.properties

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

Wydaje się, że to działa, gdy połączenie service Ajest nawiązywane z klienta, który nie jest service B. Włączyłem wzajemne uwierzytelnianie między usługami, aby certyfikat klienta był weryfikowany. Gdy żądanie jest wysyłane z adresu Bdo A, pojawia się błąd

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)

Po włączeniu debugowania ssl stwierdziłem, że ten błąd jest przyczyną tego

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

Sprawdziłem i ponownie sprawdziłem, czy magazyn kluczy i magazyn zaufanych certyfikatów są ustawione poprawnie, ale bez powodzenia. Czy istnieje sposób, aby to działało z serwerem i klientem z tym samym certyfikatem? Doceniam wszelkie wskazówki, jak mogę to zrobić (z tym samym certyfikatem), z jakim zmagam się z tym przez tydzień.

Odpowiedzi

1 SusanMustafa Nov 26 2020 at 03:36

Czy Twój JKS zawiera cały łańcuch? Jeśli zajrzysz do środka, czy masz cały łańcuch aż do certyfikatu głównego?

Błąd mówi ci, że nie może znaleźć łańcucha. Twój certyfikat prawdopodobnie jest z podpisem własnym? lub twój JKS nie ma pełnego łańcucha.

Zobacz podobne pytanie dotyczące Stackoverflow : CamelJettyWebSocketServer, błąd krytyczny: 42: łańcuch o wartości null cert