2017-01-30 261 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