java PKCS11异常:不允许CKR_键函数
你看,我有一个小程序,它根据pkcs11令牌中的RSA
私钥解密一些信息
在巴西,现在有一些新证书包含2048位私钥。也有常规1024位的旧型号
到目前为止,我的应用程序运行良好。我使用的是1024位证书,所以不麻烦。但现在我有了一些新的证书要测试,它崩溃了,出现了标题错误:
PKCS11Exception: CKR_KEY_FUNCTION_NOT_PERMITTED
顺便说一句:它仍然在为1024位工作
在太阳下。小程序。应用程序面板。运行(未知源) 在爪哇。朗。丝线。运行(未知源) 原因:太阳。安全pkcs11。包装纸。PKCS11异常:不允许使用CKR键功能 在太阳下。安全pkcs11。包装纸。PKCS11。C_DecryptInit(本机方法) 在太阳下。安全pkcs11。p11rsachipher。初始化(P11RSACipher.java:260) 在太阳下。安全pkcs11。p11rsachipher。implInit(P11RSACipher.java:193)
我使用标准java安全名称空间。我在某个地方读到,Java在策略上有一个限制,与我们如何对待安全性有关,我不知道
有关系吗
我知道我必须使用bouncyCastle提供程序,但我只是想知道
尽管如此,BC不能使用P11PrivateKey,因为它使用硬件进行签名或加密
结论:
正如我所发现的,多亏了猫头鹰,在etoken酒店,钥匙并不是为那只猪做的。。。上帝啊
不起作用的:
Serial number: (...)
Issued to: (...)
Issued by: (...)
Valid from: (...)
Valid until: (...)
Intended purposes: Client Authentication,Secure Email
Key size: 2048 bits
Container name: (...)
Modulus: (...)
Key specification: AT_KEYSIGNATURE
另一个有效的方法是:
Serial number: (...)
Issued to: (...)
Issued by: (...)
Valid from: (...)
Valid until: (...)
Intended purposes: Secure Email,Client Authentication,Smart Card Logon
Key size: 1024 bits
Container name: (...)
Modulus: (...)
Key specification: AT_KEYEXCHANGE
Default Key Container: Yes
Auxiliary Key Container: Yes
我知道,AT_-KEYEXCHANGE本身并不意味着它可以解密,但拥有AT_-keyexignature意味着它只能用于该端口。正如我已经测试过的,一个对签名有效
# 1 楼答案
它与Java密钥长度无关。尽管如此,Java甚至可能不知道密钥的大小,因为密钥仍然保留在硬件令牌上。属性CKA_ENCRYPT更有可能被设置为CK_FALSE的CK_BBOOL值
来自PKCS#11 v2。20(cryptoki)
# 2 楼答案
您正在混合PKCS#11(CKR_XXX)和CryptoAPI(AT_XXX)。您可以使用pkcs11工具或pkcs11转储(谷歌)列出您拥有的对象的属性