【问题标题】:CKR_DEVICE_ERROR using iaik for digital signatureCKR_DEVICE_ERROR 使用 iaik 进行数字签名
【发布时间】:2014-05-13 14:02:25
【问题描述】:

我正在尝试开发一个能够使用智能卡对文件进行数字签名的 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(); 

【问题讨论】:

    标签: java digital-signature pkcs#11 iaik-jce


    【解决方案1】:

    我修复了 CKR_DEVICE_ERROR。问题只是智能卡连接不良(Omnikey 6121 构建不良)

    用回形针将芯片卡在板上更紧地为我解决了这个问题。

    【讨论】:

    • 是的,我也遇到了同样的情况
    【解决方案2】:

    您是否也使用了 Pkcs11Wrapper?如果是这样,您是否指定了java.library.path? Wrapper 版本应与 Provider 版本匹配,或查看自述文件了解更多详细信息。

    关于您的代码,请指定 IAIK 提供者:

    Signature.getInstance("SHA1withRSA", iaikProvider)
    

    并尝试像这样添加提供者:

    IAIK.addAsProvider(false);
    

    如果这无助于检查 pkcs11 模块生成的错误日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多