Autenticación mutua entre dos servicios con el mismo certificado en la misma máquina

Nov 26 2020

Tengo un servicio de arranque de primavera simple ( service A) que tiene una API REST expuesta. Para agregar compatibilidad con https, utilicé el mismo certificado que se emite para otro servicio ( service B) presente en el mismo cuadro. Aquí está mi archivo 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

Esto parece funcionar cuando la conexión service Ase realiza desde un cliente que no lo es service B. Activé la autenticación mutua entre servicios para que se valide el certificado del cliente. Cuando se realiza una solicitud de Ba A, obtengo un error

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)

Después de habilitar la depuración ssl, encontré que este error estaba causando esto

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

Verifiqué y volví a verificar que el almacén de claves y el almacén de confianza estén configurados correctamente, pero no tuve suerte. ¿Hay alguna manera de hacer que esto funcione si el servidor y el cliente tienen el mismo certificado? Aprecio cualquier sugerencia sobre cómo puedo hacer que funcione (con el mismo certificado) ya que he estado luchando con esto durante una semana.

Respuestas

1 SusanMustafa Nov 26 2020 at 03:36

¿Su JKS contiene toda la cadena? Si miras dentro, ¿tienes toda la cadena hasta el certificado raíz?

El error le dice que no puede encontrar la cadena. ¿Su certificado probablemente esté autofirmado? o su JKS no tiene la cadena completa.

Vea una pregunta similar de Stackoverflow : CamelJettyWebSocketServer, error fatal: 42: cadena de certificados nulos