【问题标题】:Two-way (mutual) SSL authentication with the Apache CXF client plugin for grails使用用于 grails 的 Apache CXF 客户端插件的双向(相互)SSL 身份验证
【发布时间】:2015-02-07 22:20:14
【问题描述】:

我无法使 Apache CXF 客户端 grails 插件与双向 SSL 身份验证一起工作。我调用的web服务提供了一个开发环境URL,不需要双向认证,一切正常。但是,他们提供的测试环境 URL 确实需要双向认证,我一直无法使其工作。

grails 应用程序正在 Windows 服务器上的 Tomcat 中运行。

我编写了一个独立的 Java 测试应用程序来测试 2 路身份验证。我用适当的密钥库、信任库等调用它,它工作正常。 (这是一个纯 Java 应用程序——没有 CXF。)我已经将这个相同的 Java 类导入到运行在 Tomcat 上的 grails 应用程序中,这也可以。但是,如前所述,使用 CXF 调用时,它不起作用。

我在 Tomcat 中开启了 -Djavax.net.debug=ssl 并且可以看到当服务器发送 CertificateRequest 消息时客户端没有发回证书。 (当使用 Java 类时,客户端会以正确的证书进行响应。)

我尝试了几种不同的方法来设置密钥库和信任库参数。我目前在启动 Tomcat 时使用 ++JvmOptions 设置它们:

++JvmOptions
-Xrs;
-Djavax.net.debug=ssl;
-Djavax.net.ssl.trustStore=C:\path\to\truststore.jks;
-Djavax.net.ssl.keyStore=C:\path\to\keystore.jks;
-Dhttps.cipherSuites=SSL_RSA_WITH_3DES_EDE_CBC_SHA;
-Djavax.net.ssl.keyStorePassword=password;
-Djavax.net.ssl.trustStorePassword=password

我目前正在使用 cxf-client:2.0.3,虽然我也尝试过使用 cxf-client:1.5.6。

【问题讨论】:

    标签: java tomcat grails ssl cxf


    【解决方案1】:

    我对 grails 不是很熟悉,但是您的 cxf 客户端调用如何?您是否将密钥库/信任库添加到 http 管道?

    示例:

    <http:conduit name="https:...">
        <http:tlsClientParameters>
            <sec:trustManagers>
                    <sec:keyStore type="JKS" password="password" file="..."/>
                </sec:trustManagers>
                <sec:keyManagers keyPassword="password">
                    <sec:keyStore type="JKS" password="password" file="..."/>
                </sec:keyManagers>
            <sec:cipherSuitesFilter>
            ...
            </sec:cipherSuitesFilter>
        </http:tlsClientParameters>
        <http:client AutoRedirect="true" Connection="Keep-Alive"/>   
    </http:conduit>
    

    【讨论】:

    • 我没有,但我认为 grails 插件不可能做到这一点。有人可以证实吗?另外,我的理解是它应该从 Java 继承这些设置。
    猜你喜欢
    • 2014-08-21
    • 2014-10-15
    • 2017-04-19
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2018-10-20
    相关资源
    最近更新 更多