我的Wildfly 10.0.0.Final上激活的后台进程需要使用Axis连接到Web服务。在远程服务器上,有一个自签名证书,我使用openssl在信任库中导入该证书以从远程服务器获取它,并且他们通过keytool创建信任库并将证书导入其中。
我设置了Wildfly 10.0.0.Final的standalone.xml,如下所示:
<security-realm name="SSLRealm">
<server-identities>
<ssl>
<keystore path="keystore.jks" relative-to="jboss.server.config.dir"
keystore-password="mykeystorepassword" alias="myalias"
key-password="mykeypass" />
</ssl>
</server-identities>
<authentication>
<truststore path="truststore.jks" relative-to="jboss.server.config.dir"
keystore-password="mytruststorepassword" />
</authentication>
</security-realm>
<server name="default-server">
<http-listener name="default" socket-binding="http" redirect-socket="https" />
<https-listener name="default-ssl" security-realm="SSLRealm" socket-binding="https" />
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content" />
</host>
</server>
但是,当后台进程尝试连接到远程服务时,我获得以下异常:
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
知道如何解决这个问题吗?似乎没有使用信任库或类似的东西...
答案 0 :(得分:0)
我遇到了同样的问题,只能通过向wildfly的启动脚本添加参数来解决它:
-Djavax.net.ssl.trustStore = foo.jks -Djavax.net.ssl.trustStorePassword =酒吧
当然,它会覆盖默认的cacerts。 但我不清楚为什么安全领域中定义的信任库似乎被忽略了。