首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Weblogic扼杀了CXF的SSL配置?

Weblogic扼杀了CXF的SSL配置?
EN

Stack Overflow用户
提问于 2013-07-09 14:38:14
回答 2查看 2.7K关注 0票数 3

时间很好!

我创建了一个简单的CXF客户端,用于与受SSL保护的远程服务进行通信。如果我运行JUnit测试,握手执行时不会出错,通信也会正常进行。

代码语言:javascript
复制
<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 (11g)上并执行请求,则握手失败,出现“无法找到指向请求目标的有效证书路径”的错误。根据"-Djavax.net.debug=all“获得的日志,问题是Weblogic忽略了已配置的CXF客户端的信任库,从而使其java仙人掌(/jre/lib/security)忽略。

我尝试在weblogic-application.xml中编写一行"org.springframework.beans.MethodInvocationException:,但是这会导致错误的<package-name>javax.jws.*</package-name>属性'serviceClass‘抛出异常;嵌套的异常是java.lang.NoClassDefFoundError: javax/jws/WebService“。

请有人建议,如何告诉weblogic不要参与到服务器端的通信中来?

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

代码语言:javascript
复制
<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"/>

编辑。根据这个职位,我已经将<http:conduit name="<service_namespace_port>.http-conduit">更改为<http:conduit name="*.http-conduit">,现在我得到了“嵌套异常是java.lang.RuntimeException:无法创建安全XMLInputFactory”的错误。不久前,我遇到了这个错误,我找到的解决方案是使用系统属性。但已经不适合了..。有人知道怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-10 08:10:19

最后,我给出了两个问题的解决方案。

首先,我要感谢克里斯蒂安·梅内塞给出的非常有帮助的答案!

接下来,请参阅我在这个职位中的答案,以获得“无法创建安全XMLInputFactory”问题解决方案。在此之后,请查看这个职位http:conduit 名称配置(在我的例子中,我使用了这样的构造:<http:conduit name="*.http-conduit">)。在这些信息中,我设法使我的应用程序正常工作。

因此,据我所知,的主要思想是,当WLS匹配管道名称时,它使用已配置的CXF客户端密钥存储库,但如果不匹配,则使用仙人掌。

提示提示奇迹:没有必要(但强烈建议)像它在正式文档中所说的那样命名http:导管bean (我的目标是使服务端点可配置)。http:导管bean的名称是一个模板,用于匹配要连接到的服务名称。请参考票证。贾森·佩尔提供了一个很好的解决办法。

票数 3
EN

Stack Overflow用户

发布于 2013-07-09 15:04:28

你似乎失去了依赖..。geronimo-ws-metadata_2.0* (不知道CXF版本的具体版本)。

同样在Maven Central上,这种依赖似乎只适用于cxf-buldle,也许这就是Maven没有为您包含它的原因.

顺便说一句,如果您继续使用<package-name>javax.jws.*</package-name>,这也适用,因为geronimo-ws-metadata_2.0*包含缺少的接口

==================================

这是我的配置,让管道正常工作

代码语言:javascript
复制
<!-- OVERRIDE DEFAULT TRUSTSTORE, USE BUNDLE TRUSTSTORE INSTEAD -->
<http:conduit name="{http://myWebserviceNamespace/}myWebservicePort.http-conduit">
    <http:tlsClientParameters>
        <sec:trustManagers>
            <sec:keyStore type="JKS" password="myPass"
                 resource="myTrustStore.jks" />
             </sec:trustManagers>
     </http:tlsClientParameters>
</http:conduit>     

<jaxws:client id="myClient"
       serviceClass="com.example.webservice.MyService"
       address="https://path.to/MYSERVICE/services/MyWebservice"/>

我不得不使用“资源”而不是“文件”,因为我的信任库位于类路径上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17551097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档