Tomcat SSL:找不到受信任的证书。

3

我使用keytool创建了一个证书:

keytool -genkey -alias tomcat -keyalg RSA

我将其导出并导入到我的密钥库中:

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

当我运行keytool -list时,我有两个条目:
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

还需要进行其他的配置吗?


你在“-export”和“-import”之间做了什么(为什么要重新导入刚刚导出的内容)?当“keytool”询问“*你的名字是什么?”时,你是否输入了完整的主机名(实际上是用于通用名称)?你的应用程序是否尝试连接到服务器本身(查看更多堆栈跟踪将会很有用)? - Bruno
我重新导入它,因为我认为它必须是 trustedCertEntry。我目前没有主机名,我能否使用我的IP地址代替? - CoolGravatar
1个回答

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

我已经将证书导入到我的浏览器中。那么我不能使用自签名证书吗? - CoolGravatar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接