Ulf*_*rig 5 java linux pkcs#11
我正在尝试在VM的linux系统上访问智能卡。USB设备已映射到VM,并且可以通过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
Run Code Online (Sandbox Code Playgroud)
使用其他插槽(我尝试使用0-15插槽)时,出现CKR_PIN_INCORRECT错误或“找不到PKCS11”。在我的测试中,我正在像这样加载密钥库:
char[] pin = "123456".toCharArray();
KeyStore ks = KeyStore.getInstance("PKCS11", p);
ks.load(null, pin);
Run Code Online (Sandbox Code Playgroud)
另一方面,pkcs11工具返回了插槽0:
Slot 0 CCID Compatible
token model: PKCS#15 emulated
由于Java似乎正在访问插槽0上的卡(至少没有返回错误),因此在访问密钥库时我可能正在做其他事情。如何访问私钥?
好吧,我找到了解决方案。
为什么插槽 0 似乎根本是空的。插槽 1 和插槽 2 有私钥,但受到不同(本地)PIN 的保护。使用 netkey-tool,我可以将本地 PIN 设置为全局 PIN。之后访问该卡就可以正常工作了。
| 归档时间: |
|
| 查看次数: |
3359 次 |
| 最近记录: |