我使用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
是否还需要进行其他配置?
答案 0 :(得分:1)
您需要客户端(即浏览器)信任您的服务器证书。
为此,您可以在浏览器中将服务器的证书导入为可信证书,该证书仅在您控制浏览器时才有效。或者您获得由受信任的机构签署的证书,这需要花钱。
以不同的名称导出和重新导入没有任何意义。
更新
我想我开始明白你要做什么了。您希望java客户端通过https访问webapp。是吗?
在这种情况下,您需要提供“信任库”,即包含受信任证书的密钥库。您需要将系统属性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