如何在Linux上访问Java中的智能卡?

我试图访问虚拟机上的Linux系统上的智能卡。 USB设备映射到虚拟机,并可通过lsusb(ID 076b:3021 OmniKey AG CardMan 3121)列出。 我可以通过pkcs11-tool和pkcs15-tool访问智能卡。 另外firefox可以通过/usr/lib/opensc-pkcs11.so库访问令牌。

但是当我尝试从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);

另一方面,pkcs11工具返回插槽0:

Slot 0 CCID Compatible
token model: PKCS#15 emulated

由于Java似乎访问插槽0上的卡(至少不会返回任何错误),所以在访问密钥库时可能会出现其他问题。 我如何访问私钥?


好的,我找到了解决方案。

为什么到此为止,插槽0似乎是空的。 插槽1和2具有私钥,但受到不同(本地)PIN的保护。 使用netkey-tool,我可以将本地PIN设置为全局PIN。 之后访问该卡没有任何缺陷。

链接地址: http://www.djcxy.com/p/73811.html

上一篇: How to access a smartcard in Java on Linux?

下一篇: Access restriction: The type 'BASE64Decoder' is not API