0

我们的外部供应商 WS 使用“自签名证书”,我完全按照以下线程中给出的说明在信任库中下载并导入了证书:

数字证书:如何使用将 .cer 文件导入 .truststore 文件?

我还通过运行以下命令验证了证书是否已正确添加:

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

重新启动服务,仍然得到以下执行:

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

我会错过什么?

4

1 回答 1

0

您是否使用相同的 JVM(您在属性 javax.net.ssl.trustsotre 中指向的那个)来运行您部署应用程序的 JBoss 实例?

如果是这样,并且假设您似乎已经在 J​​VM-JRE cacerts 文件中安装了可信证书,则您不需要指定这些属性(trustStore 和 trustStorePassword),因为默认情况下 JVM 在 $JAVA_HOME/ 中查找可信证书jre/lib/security/cacerts(仅当您想使用另一个密钥库时才需要定义这些属性)

啊,请注意,要验证证书是否正确安装在 cacerts 中,您应该使用您指定的相同命令,但将 -keystore 参数指向 $JAVA_HOME/jre/lib/security/cacerts(不是 keystore.jks)。

于 2013-01-09T21:53:46.500 回答