Расшифровка p7m с помощью CMS и Luna Hsm на Jboss

Я расшифровываю файл p7m через API BouncyCastle, поддерживаемый Luna HSM. В одном месте все работает как шарм. Если я разверну один и тот же код в Jboss в режиме домена или на двух отдельных узлах, я получаю следующее: «LunaException: невозможно ввести ключ», а функция «C_UnwrapKey» возвращает 0x110 для ключа = xxxxxxx»

Обратите внимание, что дескриптор ключа не существует в hsm.

Я пытался использовать LunaProvider.jar в качестве системного глобального модуля, чтобы избежать проблем с загрузчиком классов, а также пробовал без него. Клиент настроен правильно. Если я запускаю приложение с двумя загрузочными экземплярами на двух физических узлах по отдельности, все работает. Запуск в автономном режиме tomcat также работает.

    CMSEnvelopedData envelopedData = new CMSEnvelopedData(encEnvelopedData);

        log.info("get recipient infos");
        RecipientInformationStore recipients = envelopedData.getRecipientInfos();
        log.info("get recipients size:{}",recipients==null?"null":recipients.size());
        //avoid assigning keys to java attributes since the operations are on the hsm
        RecipientInformation recipient = recipients.get(new JceKeyTransRecipientId((java.security.cert.X509Certificate)jcaProvider.getKeystore().getCertificate(alias)));
        if (recipient != null) {


            JceKeyTransEnvelopedRecipient trans=new JceKeyTransEnvelopedRecipient((PrivateKey)jcaProvider.getKeystore().getKey(alias,jcaProvider.getPwd().toCharArray()));

            trans.setProvider("LunaProvider");



            CMSTypedStream cmsTs= recipient.getContentStream(trans);
            return cmsTs.getContentStream();

Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
1
0
327
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно установить ключ как извлекаемый, чтобы работать. Это связано с тем, что переведенный ключ временно хранится в файле hsm.

Для этого можно:

  • добавить в java.security com.safenetinc.luna.provider.createExtractableKeys=true
  • используя класс LunaSlotManager, установите ключи как извлекаемые

Пример кода для класса диспетчера слотов:

slotManager = LunaSlotManager.getInstance();

            slotManager.login(user, pwd);

            slotManager.setSecretKeysExtractable(true);

Другие вопросы по теме