我使用自签名证书进行与Axis2服务器之间的HTTPS连接。所有这些连接都可以正常工作。
我的网络服务中有一部分负责发送电子邮件。我使用GMail发送邮件。
问题是当我尝试使用SSL连接发送邮件时,我收到证书错误,即GMail证书不受信任。我也遇到过与JBoss类似的问题。有一次,我能够解决这个问题,下载GMail证书,而不是使用Keytool实用程序将其导入Keystore。很长一段时间,这都有效。
但直到最近我才开始重新获得旧问题。我试图使用上次修复问题的旧技术,但这次没有用。 (不知道为什么)
我认为GMail使用签名证书,任何服务器都应该信任开箱即用的证书,让它成为JBoss或Axis2。我无法弄清楚问题究竟是什么。是因为使用了自签名证书吗?或者是否有任何特定的创建方式,以便签名证书可信?
感谢您的帮助。
答案 0 :(得分:1)
要进行SSL加密的服务器/客户端通信,我们需要Keystores和Truststore for Server&客户。以下是创建它们的步骤。
#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。