JDBC 连接池 SSL 错误 PKIX 构建失败

JDBC Connection Pool SSL Error PKIX building failed

这是使用最新的 Glassfish (4.1)、针对 Postgres 9.4 的最新 Postgres 驱动程序 (9.3-1102 JDBC 41),以及最新的 Java (1.8.0_31-b13 ).

这也是使用商业 CA 证书,我检查了 $JAVA_HOME/jre/lib/security/cacerts 中是否存在 CA 根。为了好的措施,我还添加了中间证书。

我还验证了根和中间体在 glassfish domains/domain1/config/cacerts.jks

我收到的错误消息是:

An error has occured. Ping Connection Pool failed for XXX. Connection could not be allocated because: SSL error: sun.security.validator.ValidatorException: PKIX path building failed sun.security.provider.SunCertPathBuilderException: unable to find valid certification path to requested target.

Postgresql 日志显示如下:

LOG:  could not accept SSL connection: sslv3 alert certificate unknown

Glassfish server.log 除了上述错误之外没有显示任何内容。

如果我设置

sslfactory=org.postgresql.ssl.NonValidatingFactory

那么 ping 当然可以正常工作了。但这对于生产目的来说显然是完全和完全不能接受的,因为毫无疑问,针对 MITM 攻击的保护是强制性的!

只是为了回答我自己的问题,我做的一切都是对的。我唯一错过的是检查是否从正确的文件中读取了 Postgres SSL 证书 (/etc/postgresql/9.4/main/postgresql.conf ).

我现在可以 Ping 成功了