Извлечение секретного ключа не работает в JBOSS EAP 7.1 от Luna Safenet HSM - PullRequest
0 голосов
/ 17 января 2019

Я установил закрытый ключ в хранилище ключей 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();

Ошибка, которую я получаю, когда он выполняет строку в keyAgreement.generateSecret () из JBOSS, но работает из автономного приложения.

Вот ошибка, которую я получаю при извлечении секретного ключа из HSM,

com.safenetinc.luna.exception.LunaException: невозможно получить секретный ключ [2019-01-16 05:21:16 21916 @ USSY-6XLJ9N2-D задание по умолчанию для ввода-вывода задачи-2 по умолчанию] на com.safenetinc.luna.provider.keyagree.LunaKeyAgreementEcDh.engineGenerateSecretWantBytes (LunaKeyAgreementEcDh.j) [2019-01-16 05:21:16 21916 @ USSY-6XLJ9N2-D задание по умолчанию для ввода-вывода задачи 2 по умолчанию] в com.safenetinc.luna.provider.keyagree.LunaKeyAgreementEcDh.engineGenerateSecret (LunaKeyAgreementEcDh.java:39) [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 задание по умолчанию для ввода-вывода задачи 2 по умолчанию на com.sjm.patientPortal.services.ngq.tool.HSMClinetServiceTool.validateHSM (HSMClinetServiceTool.java:103) [2019-01-16 05:21:16 21916 @ USSY-6XLJ9N2-D задание по умолчанию для ввода-вывода задачи-2 по умолчанию] на com.sjm.patientPortal.services.ngq.tool.HSMClinetServiceTool $$ FastClassBySpringCGLIB $$ 1b568ke0 (в) Вызывается: com.safenetinc.luna.exception.LunaCryptokiException: функция 'CA_DeriveKeyAndWrap' возвращает 0x6a для ключа = 2305 [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 задание по умолчанию для ввода-вывода задачи 2 по умолчанию] на com.safenetinc.luna.LunaAPI.DeriveKeyAndWrapEcDh (собственный метод) [2019-01-16 05:21:16 21916 @ USSY-6XLJ9N2-D задание по умолчанию для ввода-вывода задания 2 по умолчанию] на com.safenetinc.luna.provider.keyagree.LunaKeyAgreementEcDh.engineGenerateSecretWantBytes (LunaKeyAgreementE0Dh.jj) 101

Я испробовал все варианты. и нужна ваша помощь, чтобы решить эту проблему.

спасибо

1 Ответ

0 голосов
/ 24 апреля 2019

Два способа решить эту проблему: -

  1. Добавить com.safenetinc.luna.provider.createExtractableSecretKeys=true в java.security.Эта опция помечает все новые сгенерированные секретные ключи как извлекаемые.

  2. Если вы не хотите, чтобы для всех ключей было установлено значение CKA_EXTRACTABLE, то вам нужно изменить свой код следующим образом ...LunaSlotManager manager = LunaSlotManager.getInstance(); manager.setSecretKeysExtractable(true); manager.login(0, "pass");

...