有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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意味着它只能用于该端口。正如我已经测试过的,一个对签名有效


共 (2) 个答案

  1. # 1 楼答案

    它与Java密钥长度无关。尽管如此,Java甚至可能不知道密钥的大小,因为密钥仍然保留在硬件令牌上。属性CKA_ENCRYPT更有可能被设置为CK_FALSE的CK_BBOOL值

    来自PKCS#11 v2。20(cryptoki)

    CKR_KEY_FUNCTION_NOT_PERMITTED: An attempt has been made to use a key for a cryptographic purpose that the key’s attributes are not set to allow it to do. For example, to use a key for performing encryption, that key must have its CKA_ENCRYPT attribute set to CK_TRUE (the fact that the key must have a CKA_ENCRYPT attribute implies that the key cannot be a private key). This return value has lower priority than CKR_KEY_TYPE_INCONSISTENT.

  2. # 2 楼答案

    您正在混合PKCS#11(CKR_XXX)和CryptoAPI(AT_XXX)。您可以使用pkcs11工具或pkcs11转储(谷歌)列出您拥有的对象的属性