我们的外部供应商WS使用“自签名证书”,我完全按照以下主题中的说明在信任库中下载并导入证书:
Digital Certificate: How to import .cer file in to .truststore file using?
我还通过运行以下命令验证了证书是否已正确添加:
keytool -list -v -keystore keystore.jks
我在run.config(JBoss)文件中添加了以下条目:
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djavax.net.ssl.trustStore=/jboss/jdk1.6.0_25/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassworld=changeit"
fi
重新启动的服务仍然得到以下execption:
ERROR [org.jboss.ws.core.CommonClient] Exception caught while (preparing for) performing the invocation:
java.io.IOException: Could not transmit message
....
....
....
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found
我能错过什么?
答案 0 :(得分:0)
您是否使用相同的JVM(您在属性javax.net.ssl.trustsotre中指向的JVM)来运行已部署应用程序的JBoss实例?
如果是这样,并且假设您似乎已在JVM-JRE cacerts文件中安装了可信证书,则不需要指定这些属性(trustStore和trustStorePassword),因为默认情况下JVM会查找可信证书$ JAVA_HOME / jre / lib / security / cacerts(只有在你想使用另一个密钥库时才需要定义这些属性)
啊,请注意,为了验证证书是否正确安装在cacerts中,您应该使用您指定的相同命令,但将-keystore参数指向$ JAVA_HOME / jre / lib / security / cacerts(而不是keystore.jks)。