【发布时间】:2015-10-21 12:41:32
【问题描述】:
我正在尝试创建一个密钥库以使用智能卡读卡器获取私钥。
String config = "name = AKIS\nlibrary = C:/Windows/System32/akisp11.dll";
Security.addProvider(akisProvider);
KeyStore ks = KeyStore.getInstance("PKCS11", akisProvider);
ks.load(null, "000000".toCharArray());
但它给了我这个例外:
java.io.IOException: load failed
at sun.security.pkcs11.P11KeyStore.engineLoad(P11KeyStore.java:763)
at java.security.KeyStore.load(KeyStore.java:1445)
at deneme.AkisImzaImpl.dene(AkisImzaImpl.java:55)
at deneme.Deneme.main(Deneme.java:83)
Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_ATTRIBUTE_TYPE_INVALID
at sun.security.pkcs11.wrapper.PKCS11.C_GetAttributeValue(Native Method)
at sun.security.pkcs11.wrapper.PKCS11$SynchronizedPKCS11.C_GetAttributeValue(PKCS11.java:1623)
at sun.security.pkcs11.P11KeyStore.mapLabels(P11KeyStore.java:2277)
at sun.security.pkcs11.P11KeyStore.engineLoad(P11KeyStore.java:755)
... 3 more
此代码直到昨天才有效。我无法弄清楚问题所在。如果您能帮助我,我将不胜感激。
【问题讨论】:
-
欢迎来到 StackOverflow okorkut!请注意您使用的标签。始终指明语言/运行时(即 Java),并确保您使用具有大量关注者的高级标签。您的其中一个标签实际上在描述中具有 请勿使用!
-
您的环境有什么变化吗? PKCS#11 dll 可能吗?或者您是否在令牌中添加了对象?不幸的是,该异常对于实际问题非常没有帮助,因为可以为令牌中的任何对象调用
C_GetAttributeValue。 -
没有任何变化。我从网站下载并安装并安装了驱动程序,为我提供了智能卡读卡器。我尝试了示例代码来测试它是否有效。它确实起作用了。但它不再起作用了。
-
API 记录器(如 this)对于查看“幕后”非常有用。
-
@vlp 啊,我不知道有一个开源的,很高兴知道!这是希望其他 .dll 不使用任何专有方法...
标签: java cryptography digital-signature keystore pkcs#11