2010-09-19 86 views
3

我使用密钥工具创建的证书:Tomcat的SSL:没有可信证书找到

keytool -genkey -alias tomcat -keyalg RSA 

导出和导入到我的密钥库:

keytool -export -alias tomcat name.crt 
keytool -import -file name.crt 

当我在keytool -list我有2项:

tomcat, Sept 15, 2010, keyEntry, 
Certificate fingerprint (MD5): ... 
mykey, Sept 17, 2010, trustedCertEntry 
Certificate fingerprint (MD5):... 

请注意,两个条目的指纹都是相同的。

我配置我的server.xml中指向我的.keystore文件

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" 
     maxThreads="150" scheme="https" secure="true" 
     keystoreFile="${user.home}/.keystore" keystorePass="changeit" 
     clientAuth="false" sslProtocol="TLS" /> 

<Connector port="8009" protocol="AJP/1.3" redirectPort="443" /> 

但在我的tomcat日志中我看到,当我在我的Java应用程序执行的操作:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found 
... 
sun.security.validator.ValidatorException: No trusted certificate found 

有需要完成的任何其他配置?

+0

你做'-export'和'-import'之间什么(为什么重新导入你刚刚出口)?当'keytool'问“你的姓和名是什么?”时(这是为了通用名)?您的应用程序是否尝试连接到服务器本身(查看更多堆栈跟踪会很有用)。 – Bruno 2010-09-19 16:03:11

+0

我重新导入它,因为我认为它必须是trustedCertEntry。我没有主机名称的ATM。我可以使用我的IP地址吗? – CoolGravatar 2010-09-19 16:49:43

回答

1

您需要客户端(即浏览器)来信任您的服务器证书。

为此,您要么将浏览器中的服务器证书作为可信证书导入,只有在您控制浏览器的情况下才能使用该证书。或者你得到一个由值得信赖的权威机构签署的证书,这需要花钱。

以不同名称导出和重新导入没有任何意义。

更新:

我想我开始明白你在做什么。您希望Java客户端通过https访问Web应用程序。是?

在这种情况下,您需要提供'信任库',即包含可信证书的密钥库。您需要将系统属性javax.net.ssl.trustStore设置为要使用的信任库名称。

您可能也可以使用手工制作的TrustManager。这个网站似乎给这方面的消息:http://download.oracle.com/javase/1.4.2/docs/guide/security/jsse/JSSERefGuide.html

这个简单的例子可以很好的帮助:http://stilius.net/java/java_ssl.php

+0

我没有将证书导入到我的浏览器。所以我不能使用自签名证书? – CoolGravatar 2010-09-19 17:11:22