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 成功了
这是使用最新的 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 成功了