要進行SSL加密的服務器/客戶端通信,我們需要密鑰庫和Truststore服務器&客戶端。以下是創建它們的步驟。
#Creating Server keystore and exporting a certificate
keytool -genkey -alias serverkeys -keyalg RSA -keystore server.keystore -storepass changeit -keypass changeit -dname "CN=test.com, OU=Test, O=Test, L=London, ST=London, C=UK"
keytool -export -alias serverkeys -keystore server.keystore -storepass changeit -file server.cer
#Creating Client keystore and exporting a certificate
keytool -genkey -alias clientkeys -keyalg RSA -keystore client.keystore -storepass changeit -keypass changeit -dname "CN=test.com, OU=test, O=test, L=London, ST=London, C=UK"
keytool -export -alias clientkeys -keystore client.keystore -storepass changeit-file client.cer
#Making a copy of cacerts file. These copies will be used for client/server truststore
cp /usr/java/jdk1.6.0_14/jre/lib/security/cacerts client.truststore
cp /usr/java/jdk1.6.0_14/jre/lib/security/cacerts server.truststore
#Copying server certificate to Client truststore
keytool -import -trustcacerts -v -keystore client.truststore -storepass changeit -file server.cer
#Copying Client certificate to Server truststore
keytool -import -trustcacerts -v -keystore server.truststore -storepass changeit -file client.cer
在最初的幾個迭代我沒有使用CACERT而是直接創建證書信任存儲,並且也運作良好。當我們需要使用SSL連接到其他某些服務時,出現了問題,即使服務使用了簽名證書,也無法建立連接。
例如,如果信任庫不是從cacerts創建的,連接到GMail SMTP服務器將失敗。即使GMail使用簽名證書,我們也會使用不知道GMail證書是否可信的信任庫。出於這個原因,我們使用cacerts來創建信任庫。之後,我們能夠連接使用簽名證書的任何服務。
如果遇到未簽名證書,我們將不得不將它們添加到Components Truststore。