2017-01-30 15 views
2

我已经设法正确配置我的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得到更新并添加新的证书别名时会发生什么?

回答

1

定义您自己的信任库(包括您接受的CA根证书)而不是使用JVM的默认信任根CA是一种很好的做法。

这样你就不依赖JVM的最终更新,这可能会添加一个不需要的CA或删除一个需要的。 Modifiyng cacerts也会影响使用相同JVM的其他应用程序。

不需要将CA证书添加到密钥库。

+0

我已经根据您的答案编辑我的问题,方式是我现在只将ca证书导入到我的信任库。 非常感谢 – raul7