【问题标题】:CXF WS-Security with keystore from HSMCXF WS-Security 与来自 HSM 的密钥库
【发布时间】:2019-01-21 11:33:50
【问题描述】:

我正在使用来自CXF 的示例项目“ws_security_sign_enc”,这是一个带有简单 SOAP 服务的客户端/服务器项目。 它只发送问候语(消息经过加密和签名)。

对于加密和签名,使用了 CXF 内部安全机制。因此加密和解密属性使用 Apache Merlin 来获取密钥库位置、密码等。

现在我想连接 HSM。我已经通过 JCE 从 HSM 以 KeyStore 对象的形式加载了密钥库。

我怎样才能做到这一点,这个密钥库对象用于我的 WebService 中的加密/解密?我想,我必须为此以编程方式设置 WS Security / WSS4j Crypto。

我不想保留密钥库并将其路径放回 encryption.properties。还有其他可能吗?

【问题讨论】:

    标签: java cxf keystore hsm wss4j


    【解决方案1】:

    HSM 应该支持 PKCS#11。假设您已经 configured Sun PKCS#11 provider for your HSM(带有库路径、槽索引等的 pkcs11.cfg),那么您必须修改 WSS4J 加密 .properties 文件以确保:

    • org.apache.ws.security.crypto.provider=org.apache.wss4j.common.crypto.MerlinDevice
    • org.apache.ws.security.crypto.merlin.keystore.type=PKCS11
    • org.apache.ws.security.crypto.merlin.keystore.file 属性已删除。

    【讨论】:

    • 感谢您的提示,但我真的不想为不同服务器实例上的所有应用程序配置 PKCS#11。我已经建立了一个自己的 HSMConnectionProvider,它扩展了 Merlin,关心登录到 HSM 并将我从 HSM 获得的加载的密钥库设置到 Merlin 父类中。是否有任何安全问题/优化或此过程是否正常?
    • 不确定我是否理解。我并不是要对所有应用程序使用相同的WSS4J configuration。您可以为每一个设置不同的 WSS4J 配置。如果您的某些应用程序不使用 PKCS#11,请为它们使用不同的配置:将MerlinDevice 替换为 crypto.providerMerlin 类,并将 PKCS11 替换为 PKCS12JKS 等. 对于keystore.type,并设置keystore.file(SunPKCS11 提供程序将被忽略)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多