我的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)


任何想法如何解决这个问题?似乎没有使用信任库或类似的东西...

最佳答案

我有同样的问题,只能通过将参数添加到wildfly的启动脚本中来解决:

-Djavax.net.ssl.trustStore = foo.jks
-Djavax.net.ssl.trustStorePassword = bar

当然,它会覆盖默认的cacerts。
但是我不清楚为什么似乎忽略了安全领域中定义的信任库。

07-26 09:30