使用自签名证书

时间:2011-11-02 07:53:28

标签: ssl jboss https axis2 ssl-certificate

我使用自签名证书进行与Axis2服务器之间的HTTPS连接。所有这些连接都可以正常工作。

我的网络服务中有一部分负责发送电子邮件。我使用GMail发送邮件。

问题是当我尝试使用SSL连接发送邮件时,我收到证书错误,即GMail证书不受信任。我也遇到过与JBoss类似的问题。有一次,我能够解决这个问题,下载GMail证书,而不是使用Keytool实用程序将其导入Keystore。很长一段时间,这都有效。

但直到最近我才开始重新获得旧问题。我试图使用上次修复问题的旧技术,但这次没有用。 (不知道为什么)

我认为GMail使用签名证书,任何服务器都应该信任开箱即用的证书,让它成为JBoss或Axis2。我无法弄清楚问题究竟是什么。是因为使用了自签名证书吗?或者是否有任何特定的创建方式,以便签名证书可信?

感谢您的帮助。

1 个答案:

答案 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。