【问题标题】:cxf Mutual SSL configuration externalizing key and password to use JNDIcxf 相互 SSL 配置外部化密钥和密码以使用 JNDI
【发布时间】:2013-08-26 17:11:10
【问题描述】:

我们在 Jboss EAP 5.1 中部署了一个工作了一年多的 CXF 网络服务,并使用 Spring 2.5

我们现有的客户证书管理策略如下:

  1. 对于非 PROD,证书被命名为“NAME-NON-PROD.cer”。
  2. 对于 PROD,证书名为“NAME-PROD.cer”

从 (1) 中,我们将 privateKey 提取到名为 NAME.pfx 的文件中,并将其部署到非生产服务器。

从 (2) 中,我们将 privateKey 提取到名为 NAME.pfx 的文件中(与上面完全相同,密码与上面完全相同),但仅将其部署到 prod 服务器中。

或者证书名称遵循 NAME-ENVIRONMENT.cer 模式。 而提取出来的私钥只有NAME.pfx(没有环境后缀)。

要启用 MutualSSL,我们在 jboss-cxf.xml 中有这个:

<http:conduit name="*.http-conduit">
    <http:tlsClientParameters
        secureSocketProtocol="SSL">
                      <!-- START - setup private key for Mutual SSL -->
        <sec:keyManagers keyPassword="MyPassword">
            <sec:keyStore type="PKCS12" password="MyPassword" resource="Path/To/Private/Key/NAME.pfx" />
        </sec:keyManagers>
                      <!-- END - setup private key for Mutual SSL -->
        <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>

上面的效果很好。

但是,证书(私钥)即将到期。最近有一个重组,所以另一个团队现在负责维护证书和密码。问题是他们拒绝从上面的非产品和产品中提取密钥到一个名称完全相同的文件中。他们认为 pfx 文件应该命名不同,包括后缀(-PROD 或 -NON-PROD),并且配置应该被外部化......也许从 JNDI 读取。

我在网上找不到一个示例,它读取一个 JNDI 来实例化一个用于 privateKey 名称的 spring bean 和另一个用于密码的 spring bean ... 然后用它在 tlsClientParameters 中实例化上面的 keyManagers。

例如,如果我从 JNDI 创建以下 spring bean;

<bean id="MyPvtKey" 
class="org.springframework.jndi.JndiObjectFactoryBean"
    p:jndiName="config/MyPvtKey" 
/>

<bean id="MyPvtKeyPwd" 
class="org.springframework.jndi.JndiObjectFactoryBean"
    p:jndiName="config/MyPvtKeyPwd" 
/>

如何使用上述方法在 tlsClientParameters 中设置密钥库。

谁能给我一个资源或例子。

SGB

【问题讨论】:

  • 我已经看过这个(stackoverflow.com/a/11190816),但这不是我想要的。我更喜欢从 JNDI 而不是属性文件中读取,因为我们所有的外部配置目前都是通过 JNDI 完成的。

标签: spring web-services ssl cxf jndi


【解决方案1】:

上述方法无效。 相反,我们选择使用属性文件并使用 spring,如下所示:

&lt;context:property-placeholder location="classpath:${environment}-key.properties"/&gt;

详情在这里:in this stackoverflow thread

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 2017-03-12
    • 2015-10-07
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多