CKR_DEVICE_ERROR использует iaik для цифровой подписи

Я пытаюсь разработать приложение Java, которое может выполнять цифровую подпись в файле со смарт-картой.

Я установил провайдера PKCS#11 следующим образом:

Security.addProvider(new IAIK());
Properties providerProperties = new Properties();
providerProperties.put("PKCS11_NATIVE_MODULE","path\\asepkcs.dll");
IAIKPkcs11 pkcs11Provider = new IAIKPkcs11(providerProperties);
Security.addProvider(pkcs11Provider);
 Module module = Module.getInstance("path\\asepkcs.dll");

После того, как я прочитал KeyStore, который я загружал на смарт-карту раньше, но когда я пытаюсь использовать метод для создания цифрового знака, приложение ловит следующее исключение:

java.security.SignatureException: iaik.pkcs.pkcs11.wrapper.PKCS11Exception: CKR_DEVICE_ERROR                      
at iaik.pkcs.pkcs11.provider.signatures.ExternalHashSignature.pkcs11Sign(ExternalHashSignature.java:294)
at iaik.pkcs.pkcs11.provider.signatures.PKCS11Signature.engineSign(PKCS11Signature.java:638)
at java.security.Signature$Delegate.engineSign(Unknown Source)
at java.security.Signature.sign(Unknown Source)
at sii.tesi.firma.provasc.FirmaScK.main(FirmaScK.java:288)

Я не могу понять, как я могу устранить ошибку CKR_DEVICE_ERROR. Я использую для знака следующие методы:

Signature signAlg = Signature.getInstance("SHA1withRSA"); 
signAlg.initSign(privateKey); 
signAlg.update(toBeEncrypted); 
byte[] signatureValue = signAlg.sign(); 

person user3632773    schedule 13.05.2014    source источник


Ответы (2)


Я исправил CKR_DEVICE_ERROR. Проблема заключалась просто в том, что смарт-карта плохо подключалась (Omnikey 6121 плохо собран)

скрепка, чтобы плотнее зажать чип на плате, решила эту проблему для меня.

person Haring    schedule 30.09.2016
comment
Да, то же самое случилось со мной - person barth; 19.03.2020

Вы также использовали Pkcs11Wrapper? Если да, указали ли вы java.library.path? Версия Wrapper должна совпадать с версией Provider. Дополнительные сведения см. в файле readme.

Что касается вашего кода, укажите поставщика IAIK:

Signature.getInstance("SHA1withRSA", iaikProvider)

и попробуйте добавить провайдера следующим образом:

IAIK.addAsProvider(false);

Если это не поможет, проверьте журнал ошибок, созданный модулем pkcs11.

person Manuel    schedule 16.08.2014