您看,我有一个applet,它基于RSA令牌中的pkcs11私钥解密一些信息。
在巴西,现在有一些包含2048位私钥的新证书。还有一些老型号,有规律的1024位,以及。
直到现在,我的应用程序运行良好。我使用的是1024位证书,所以不用麻烦。但是现在我有了一些新的证书要测试,它与标题错误崩溃:
PKCS11Exception: CKR_KEY_FUNCTION_NOT_PERMITTED
顺便说一句:它还在为1024位工作。
在sun.security.pkcs11.wrapper.PKCS11.C_DecryptInit(Native方法的sun.security.pkcs11.wrapper.PKCS11Exception: CKR_KEY_FUNCTION_NOT_PERMITTED引起的java.lang.Thread.run(未知源)在sun.security.pkcs11.P11RSACipher.implInit(P11RSACipher.java:193)的java.lang.Thread.run
我使用standart java安全命名空间。我在某些地方读到过Java的局限性,在政策上,与美国如何对待安全有关,我不知道.
有什么关系吗?
我知道我必须使用bouncyCastle提供者,但我只是想知道.
尽管如此,BC不能使用P11PrivateKey,因为它使用硬件进行签名或加密。
结论:
正如我所发现的,多亏了所有者,在电子标记属性中,钥匙不是为那个豪宅制造的.上帝啊..。
不起作用的:
序列号:(.)
发至:(.)
由:(.)印发
有效来源:(.)
有效期至:(.)
预期目的:客户身份验证,安全电子邮件
密钥大小: 2048位
集装箱名称:(.)
模数:(.)
密钥规范:AT_KEYSIGNATURE
另一个,起作用的那个:
序列号:(.)
发至:(.)
由:(.)印发
有效来源:(.)
有效期至:(.)
预期用途:安全电子邮件、客户身份验证、智能卡登录
密钥大小: 1024位
集装箱名称:(.)
模数:(.)
密钥规范:AT_KEYEXCHANGE
默认密钥容器:是
辅助密钥容器:Yes
我知道AT_KEYEXCHANGE本身并不意味着可以解密,但是拥有AT_KEYSIGNATURE意味着只能用于那个豪宅。我已经测试过那一个能找到签名的..。
发布于 2012-01-17 00:09:44
它与Java密钥长度无关。尽管如此,Java可能甚至不知道密钥大小,因为关键仍然保留在硬件令牌上。属性CKA_ENCRYPT设置为CK_FALSE的CK_BBOOL值的可能性要大得多。
来自PKCS#11 v2.20 (加密)
CKR_KEY_FUNCTION_NOT_PERMITTED:有人尝试将密钥用于加密目的,而该密钥的属性并未设置为允许它这样做。例如,要使用密钥执行加密,该密钥必须将其CKA_ENCRYPT属性设置为CK_TRUE (密钥必须具有CKA_ENCRYPT属性的事实意味着密钥不能是私钥)。此返回值的优先级低于CKR_KEY_TYPE_INCONSISTENT.
。
发布于 2012-01-17 08:32:20
您正在混合PKCS#11 (CKR_XXX)和CryptoAPI (AT_XXX)。您可以使用pkcs11 11工具或pkcs11 11转储(google)列出您拥有的对象的属性。
https://stackoverflow.com/questions/8887218
复制相似问题