spring - cxf 相互 SSL 配置外部化 key 和密码以使用 JNDI

标签 spring web-services ssl cxf jndi

我们有一个在 Jboss EAP 5.1 中部署并使用 Spring 2.5 已经运行了一年多的 CXF webservice

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

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

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

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

或者证书名称遵循 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>

上面的效果很好。

但是,证书(私钥)即将过期。最近有一个重组,所以另一个团队现在负责维护证书和密码。问题是他们拒绝将上面的非产品和产品中的 key 提取到一个名称完全相同的文件中。他们认为 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 中设置 keystore 。

谁能给我指出资源或示例。

国家安全局

最佳答案

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

<context:property-placeholder location="classpath:${environment}-key.properties"/>

详情在这里:in this stackoverflow thread

关于spring - cxf 相互 SSL 配置外部化 key 和密码以使用 JNDI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18449352/

相关文章:

java - Android 设备上的嵌入式 Web 服务

java - 如何正确处理连接空闲超时错误

ruby-on-rails - bundler : command not found: spring

web-services - SOA Web 服务 - 如何在 Git 上管理个人服务开发

java - 如何获取 Jdeveloper 11.1.1.7 中构建的 Web 服务应用程序的调用客户端的 IP 地址?

ssl - 如何在自定义域 Meteor 应用程序上添加 SSL?

java - 如何将 Spring WebSecurityConfig 添加到现有项目

java - 手动分配 ID 时,Spring Data MongoDB 注释 @CreatedDate 不起作用

ssl - 在嵌入式壁虎浏览器中阻止 https url

Apache Openssl 压缩