2011-11-02 285 views
0

我正在使用自簽名證書來訪問Axis2服務器的HTTPS連接。所有這些連接都可以正常工作。使用自簽名證書

我的網絡服務中有一部分負責發送電子郵件。我使用GMail來發送郵件。

問題是當我嘗試使用SSL連接發送郵件時出現證書錯誤,即GMail證書不受信任。我也遇到了與JBoss類似的問題。有一次,我能夠解決這個問題,下載GMail證書並使用Keytool實用程序將其導入到Keystore中。很長時間以來,這一直奏效。

但是直到最近,我纔開始再次遇到老問題。我試圖使用上次修復問題的舊技術,但這一次不起作用。 (不知道爲什麼)

我認爲GMail使用一個開箱即用的簽名證書應該被任何服務器信任,讓它成爲JBoss或Axis2。我沒有弄清楚問題實際上是什麼。是否因使用自簽名證書?還是有任何特定的方式來創建它,以便籤名證書是可信的?

感謝您的幫助。

回答

1

要進行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。