我试图访问虚拟机上的Linux系统上的智能卡。 USB设备映射到虚拟机,并可通过lsusb(ID 076b:3021 OmniKey AG CardMan 3121)列出。我可以通过pkcs11-tool和pkcs15-tool访问智能卡。另外firefox可以通过/usr/lib/opensc-pkcs11.so库访问令牌。如何在Linux上使用Java访问智能卡?
但是当我尝试从Java访问智能卡时,返回一个空的密钥库。我为sun.security.pkcs11.SunPKCS11提供程序使用以下配置。
name = PKCS11Test
library = /usr/lib/opensc-pkcs11.so
slot = 0
当使用不同的插槽(我试过插槽0-15),我得到CKR_PIN_INCORRECT错误或“PKCS11未找到”。在我的测试中我加载像这样的密钥库:
char[] pin = "123456".toCharArray();
KeyStore ks = KeyStore.getInstance("PKCS11", p);
ks.load(null, pin);
在另一方面插槽0的PKCS11工具返回:
Slot 0 CCID Compatible
token model: PKCS#15 emulated
从Java似乎访问插槽卡0(至少没有返回错误),我可能在访问密钥库时做了其他的错误。我如何访问私钥?