postgresql 从wildfly设置Postgres SSL连接

cgfeq70w  于 12个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(140)

我正在尝试设置从wildfly到CloudSQL Postgres DB的SSL连接。从CloudSQL下载ssl证书(server-ca.pem、client-cert.pem和client-key.pem)后,我以以下方式创建了keystore和trustore:

keytool -import -alias server -file server-ca.pem -keystore truststore.jks -storepass password
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -out client.p12 -name client
keytool -importkeystore -deststorepass password -destkeystore keystore.jks -srckeystore client.p12 -srcstoretype PKCS12 -srcstorepass password -alias client

然后我更改了JAVA_OPTS env变量,以提供创建的密钥库:

export JAVA_OPTS="-server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djavax.net.ssl.keyStore=keystore.jks -Djavax.net.ssl.keyStorePassword=password -Djavax.net.ssl.trustStore=truststore.jks -Djavax.net.ssl.trustStorePassword=password"

然后我在standalone.xml中修改了postgres的配置文件:

jdbc:postgresql://XX.XX.XX.XX:5432/db?sslmode=require

在wildfly启动时,我得到了以下错误:

org.postgresql.util.PSQLException: FATAL: connection requires a valid client certificate

有什么想法吗?

ccrfmcuu

ccrfmcuu1#

Cloud SQL会在您创建示例时自动创建服务器证书。只要服务器证书是有效的,证书就有过期日期;在该日期之后,它将不再有效,客户端将无法使用该证书与您的示例建立安全连接。
https://cloud.google.com/sql/docs/postgres/configure-ssl-instance

e0bqpujr

e0bqpujr2#

正如https://jdbc.postgresql.org/documentation/ssl/中提到的,默认的SSL套接字工厂是LibPQFactory。这里没有直接说明,但是如果你想使用“核心”Java机制来访问密钥库/信任库以进行SSL加密处理(就像你通过指定javax.net.ssl.* 参数所做的那样),你应该通过提供sslfactory参数来使用org.postgresql.ssl.DefaultJavaSSLFactory:

sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory

因此,在您的情况下,连接url将看起来像:

jdbc:postgresql://XX.XX.XX.XX:5432/db?sslmode=require&sslfactory=org.postgresql.ssl.DefaultJavaSSLFactory

相关问题