Estoy usando SpringBoot con configuración datasource.url = jdbc:postgresql://...../mydb?ssl=true&sslFactory=....nonValidating...
en mi aplicación.yml
port: 8443 ssl: enabled: true key-alias: PGSQLServerHostNameHere key-store: keystore.jks key-store-password:.... key-store-type: JKS trust-store: #this one is irrelevant, it's just a... ### ... trust store for other restTemplate stuff trust-store-password: .... key-password: .... ciphers: "TLSv1.2" protocol: TLSSin embargo, Postgresql también se configura y ejecuta con SSL=on. ssl_ciphers='TLSv1.2'
Sin embargo, en los registros de PGSQL obtengo:
Postgresql could not accept SSL connection: sslv3 alert certificate unknownRecibo un error en mi aplicación Spring Boot en producción (este error no ocurre con mi certificado autofirmado en local):
org.postgresql...PSQLException: SSL error: sun.security.validator.ValdiatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetConfiguraciones de certificado SSL
Tengo los certificados firmados en root.crt para el servidor postgresql (incluido el certificado firmado del servidor de aplicaciones Java dentro con el alias correcto).
Tengo el certificado firmado del servidor postgresql (alias: PGSQLServerHostNameHere) en el archivo JKS como "trustEntry" para mi keystore.jks.
Tengo privateKeyEntry en mi keystore.jks para mi propio servidor.
Tengo las CA raíz en keystore.jks.
La aplicación SpringBoot funciona bien en mi máquina local con un JKS autofirmado.
Pero Postgresql es un problema... rechazando mis comunicaciones desde el servidor de aplicaciones Java.
postgresql.conf:
ssl = on ssl_ciphers = 'TLSv1.2' (everything else is default)pg_hba.conf
hostssl all all md5Postgresql could not accept SSL connection: sslv3 alert certificate unknown .... sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Esto significa que el cliente no pudo aceptar el certificado del servidor, probablemente porque la CA que emitió ese certificado no está en el almacén de confianza. Y el cliente envía a este servidor este problema como alerta para que el servidor sepa por qué falla la conexión.
Pero Postgresql es un problema... rechazando mis comunicaciones desde el servidor de aplicaciones Java.
No, su aplicación Java está rechazando la comunicación con Postgresql porque no confía en el certificado. Lo que ve en el mensaje de error de Postgresql es exactamente lo que su aplicación Java ha enviado como la razón por la que no continuará con el protocolo de enlace TLS.
Supongo que la única forma era mirar la implementación de JSSE y agregar comandos de tipo -Djavax.net.ssl a la línea de comandos o agregarlo a System.setProperty() .
Además, puede agregarlo a la URL de JDBC ssl_cert=... &ssl_key=... etc.
Tenía que encontrar los comandos correctos para postgresql. No está bien documentado.
las propiedades application.yml "ssl" no están relacionadas con javax.net.ssl