【问题标题】:Extracting secret key out does't work in JBOSS EAP 7.1 from Luna Safenet HSM从 Luna Safenet HSM 中提取密钥在 JBOSS EAP 7.1 中不起作用
【发布时间】:2019-01-17 06:46:02
【问题描述】:

我已经在 HSM 密钥库中设置了私钥,使用 ECDH 密钥协议我试图从 JBOSS 应用程序服务器中获取密钥。下面的代码在我作为独立应用程序运行时有效,但在 JBOSS EAP 7.1 中同样无效。

这里是代码,

        LunaSlotManager manager = LunaSlotManager.getInstance();  
        manager.login(0, "pass");   
        KeyStore lunaStore = KeyStore.getInstance("Luna", "LunaProvider");        
        ByteArrayInputStream is1 = new ByteArrayInputStream(("slot:" + 0).getBytes());        
        lunaStore.load(is1, "crypto1".toCharArray());
        manager.setSecretKeysExtractable(true);         
        KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH", lunaStore.getProvider());                      
        keyAgreement.init((PrivateKey)lunaStore.getKey("TestPrivateKey", "crypto1".toCharArray()));

        String publicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXjx+yO+dCt5HGPlFncNSt3oTM0cBLbgqedBW/3HVraL8qiHmMB2PVDzyLiBHOYYuZNe07vZLpdBcT9RB+dzmiA==";
        X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKey));  
        KeyFactory factory = KeyFactory.getInstance("EC");             
        keyAgreement.doPhase(factory.generatePublic(publicKeySpec), true);          
        byte[] secretKey = keyAgreement.generateSecret();

当它从 JBOSS 执行 keyAgreement.generateSecret() 行时出现错误,但它在独立应用程序中工作。

这是我从 HSM 检索密钥时遇到的错误,

com.safenetinc.luna.exception.LunaException:无法派生密钥 [2019-01-16 05:21:16 21916@USSY-6XLJ9N2-D default task-2 stdout write INFO] at com.safenetinc.luna.provider.keyagree.LunaKeyAgreementEcDh.engineGenerateSecretWantBytes(LunaKeyAgreementEcDh.java:355) [2019-01-16 05:21:16 21916@USSY-6XLJ9N2-D default task-2 stdout write INFO] at com.safenetinc.luna.provider.keyagree.LunaKeyAgreementEcDh.engineGenerateSecret(LunaKeyAgreementEcDh.java:393) [2019-01-16 05:21:16 21916@USSY-6XLJ9N2-D 默认任务 2 标准输出写入信息] 在 javax.crypto.KeyAgreement.generateSecret(KeyAgreement.java:586) [2019-01-16 05:21:16 21916@USSY-6XLJ9N2-D default task-2 stdout write INFO] at com.sjm.patientPortal.services.ngq.tool.HSMClinetServiceTool.validateHSM(HSMClinetServiceTool.java:103) [2019-01-16 05:21:16 21916@USSY-6XLJ9N2-D default task-2 stdout write INFO] at com.sjm.patientPortal.services.ngq.tool.HSMClinetServiceTool$$FastClassBySpringCGLIB$$1b5687a0.invoke() 引起:com.safenetinc.luna.exception.LunaCryptokiException:函数“CA_DeriveKeyAndWrap”在 key=2305 上返回 0x6a [2019-01-16 05:21:16 21916@USSY-6XLJ9N2-D 默认任务 2 标准输出写入信息] 在 com.safenetinc.luna.exception.LunaCryptokiException.ThrowNew(LunaCryptokiException.java:91) [2019-01-16 05:21:16 21916@USSY-6XLJ9N2-D default task-2 stdout write INFO] at com.safenetinc.luna.LunaAPI.DeriveKeyAndWrapEcDh(Native Method) [2019-01-16 05:21:16 21916@USSY-6XLJ9N2-D default task-2 stdout write INFO] at com.safenetinc.luna.provider.keyagree.LunaKeyAgreementEcDh.engineGenerateSecretWantBytes(LunaKeyAgreementEcDh.java:320)

我已经尝试了所有选项。并需要您的帮助来解决此问题。

谢谢

【问题讨论】:

  • 此问题已通过在 jre 安全策略文件 - com.safenetinc.luna.provider.createExtractableSecretKeys=true 上添加此设置得到解决

标签: jboss hsm


【解决方案1】:

解决这个问题的两种方法:-

  1. 在 java.security 中添加 com.safenetinc.luna.provider.createExtractableSecretKeys=true。此选项会将所有新生成的密钥标记为可提取。

  2. 如果您不希望所有键都将 CKA_EXTRACTABLE 设置为 true,那么您需要像这样更改您的代码... LunaSlotManager manager = LunaSlotManager.getInstance(); manager.setSecretKeysExtractable(true); manager.login(0, "pass");

【讨论】:

  • 嘿山姆,这个修复是向你推荐的,现在通过选项 -1 解决方案解决了这个问题。感谢您的帮助。
猜你喜欢
  • 2018-05-13
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 2019-05-10
相关资源
最近更新 更多