我们有一个已经工作了一年多的 CXF 网络服务,部署在 Jboss EAP 5.1 中并使用 Spring 2.5
我们现有的客户证书管理策略如下:
- 对于非 PROD,证书名为“NAME-NON-PROD.cer”。
- 对于 PROD,证书名为“NAME-PROD.cer”
从 (1) 中,我们将 privateKey 提取到名称为.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 Name 实例化一个 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 中设置密钥库。
有人可以指出我的资源或示例。
新加坡国标