我已经设法正确配置我的java应用程序以安全地连接到我的mysql,但我不知道:这是配置所需证书的正确方法吗?确保JDBC连接时证书和KeyStore配置
我创建了一个自定义的信任和自定义密钥库:
1导入服务器CA证书到我的自定义信任库文件
keytool -import -alias mysqlServerCACert -file server-ca.pem -keystore truststore
2捆绑的客户端证书和客户端密钥一起进入PKCS12文件,并将其导入到我的自定义密钥库文件
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -out client.p12 -name clientalias -CAfile server-ca.pem
keytool -importkeystore -destkeystore keystore -srckeystore client.p12 -srcstoretype PKCS12 -alias clientalias
我已经配置了我的JDBCURL使用安全连接:
mysql://[my_host]:3306/[my_db]?useUnicode=yes&characterEncoding=UTF-8&useSSL=true&requireSSL=true&verifyServerCertificate=true
我已经把我用下面的JVM环境选项应用:
JAVA_OPTS="
-Djavax.net.ssl.keyStore=/path_to_my_custom_keystore
-Djavax.net.ssl.keyStorePassword=mykeyStorePassword
-Djavax.net.ssl.trustStore=/path_to_my_custom_truststore
-Djavax.net.ssl.trustStorePassword=mytrustStorePasswordPassword"
但这样一来,其实我已经改变了默认密钥库/信任,它通常位于:$JAVA_HOME/jre/lib/security/cacerts
并且通过这样做,一些客户端库在信任库中查找其ssl证书时开始发生错误
于是, 我已经导出了整个默认CA-证书到我的自定义信任文件(显然没有必要将其导入到我的密钥库,只是为了我的信任):
keytool -importkeystore -srckeystore /etc/ssl/certs/java/cacerts -destkeystore /path_to_my_custom_truststore
现在,一切似乎要按预期工作,我主要关心的是我现在从原始默认JVM证书商店(密钥库/信任库)/etc/ssl/certs/java/cacerts
分离出来,因此容易受到此文件的将来更改。
更准确地说,当JVM得到更新并添加新的证书别名时会发生什么?
我已经根据您的答案编辑我的问题,方式是我现在只将ca证书导入到我的信任库。 非常感谢 – raul7