Weblogic杀死CXF的SSL配置?

美好时光!

我创建了一个简单的CXF客户端,用于与受SSL保护的远程服务进行通信.如果我运行JUnit测试,则握手会正确执行,并且通信正常.

<http:conduit name="<service_namespace_port>.http-conduit">
   <http:client AutoRedirect="true" Connection="Keep-Alive"/>
   <http:tlsClientParameters secureSocketProtocol="SSL" disableCNCheck="true">
    <sec:keyManagers keyPassword="pass">
        <sec:keyStore type="JKS" password="pass" file="keystore"/>
    </sec:keyManagers>
    <sec:trustManagers>
        <sec:keyStore type="JKS" password="pass" file="truststore"/>
    </sec:trustManagers>
    <sec:cipherSuitesFilter>
        <sec:include>.*_EXPORT_.*</sec:include>
        <sec:include>.*_EXPORT1024_.*</sec:include>
        <sec:include>.*_WITH_DES_.*</sec:include>
        <sec:include>.*_WITH_AES_.*</sec:include>
        <sec:include>.*_WITH_NULL_.*</sec:include>
        <sec:exclude>.*_DH_anon_.*</sec:exclude>
    </sec:cipherSuitesFilter>
</http:tlsClientParameters>

如果我在Weblogic Server(11g)上部署应用程序并执行请求,则握手将失败,并显示错误“无法找到到请求目标的有效证书路径”.根据“ -Djavax.net.debug = all”获得的日志,问题在于Weblogic忽略了已配置的CXF客户端的信任库而获取了其Java cacert(/ jre / lib / security).

我试图写一行< package-name> javax.jws.*< / package-name>在weblogic-application.xml中,但这会杀死应用程序,并显示错误“ org.springframework.beans.MethodInvocationException:属性’serviceClass’引发异常;嵌套的异常是java.lang.NoClassDefFoundError:javax / jws / WebService”.

有人可以提出建议,如何告诉weblogic不参与集群服务器通信吗?

编辑.这是完整的客户端配置(Spring-CXF):

<http:conduit name="<service_namespace_port>.http-conduit">
        <http:client AutoRedirect="true" Connection="Keep-Alive"/>
        <http:tlsClientParameters secureSocketProtocol="SSL" disableCNCheck="true">
            <sec:keyManagers keyPassword="pass">
                <sec:keyStore type="JKS" password="pass" file="keystore"/>
            </sec:keyManagers>
            <sec:trustManagers>
                <sec:keyStore type="JKS" password="pass" file="truststore"/>
            </sec:trustManagers>
            <sec:cipherSuitesFilter>
                <sec:include>.*_EXPORT_.*</sec:include>
                <sec:include>.*_EXPORT1024_.*</sec:include>
                <sec:include>.*_WITH_DES_.*</sec:include>
                <sec:include>.*_WITH_AES_.*</sec:include>
                <sec:include>.*_WITH_NULL_.*</sec:include>
                <sec:exclude>.*_DH_anon_.*</sec:exclude>
            </sec:cipherSuitesFilter>
        </http:tlsClientParameters>
    </http:conduit>

    <jaxws:client id="service"
                  serviceClass="foo.bar.ServiceClass"
                  address="<service_url>" />
    <bean id="client" class="foo.bar.ClientClass"/>

编辑.根据this post,我已经更改了
< http:conduit name =“< service_namespace_port> .http-conduit”>到< http:conduit name =“ *.http-conduit”>
现在出现错误“嵌套的异常是java.lang.RuntimeException:无法创建安全的XMLInputFactory”.不久前,我遇到了这个错误,找到的解决方案是using the system property.但是它不再适合…
有人知道,该如何解决?

解决方法:

最后,我为两个问题都提供了解决方案.

首先,我要感谢Cristian Meneses的有用帮助!

接下来,请参见我在this post中针对“无法创建安全的XMLInputFactory”问题解决方案的回答.然后,检查this post的http:conduit名称配置(在我的情况下,我使用了这样的构造:< http:conduit name =“ *.http-conduit”>).混合这些信息,我设法使我的应用程序正常工作.

因此,据我了解,主要思想是WLS与管道的名称匹配时,它将使用配置的CXF的客户端密钥库,但如果不匹配,则使用cacerts.

提示:确实没有必要(但强烈建议)像官方文档中所说的那样命名http:conduit bean(我的目的是使服务端点可配置). http:conduit bean的名称是用于匹配服务的模板
您要连接的名称.请参阅ticket.Jason Pell提供了一个很好的解决方法.

上一篇:javascript – 预检OPTIONS对SOAP服务的请求不起作用


下一篇:超级详细通信协议解析webservice和dubbo通信协议区别