2011-11-02 185 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。