我試圖訪問虛擬機上的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(至少沒有返回錯誤),我可能在訪問密鑰庫時做了其他的錯誤。我如何訪問私鑰?
您可以在配置文件中設置「plug_and_play = false」來禁用hotplug功能。或者不要依賴PKCS#11插槽索引,而是搜索所有插槽(有時候很難..) – 2011-06-22 14:09:04
謝謝你的提示! 「配置文件」是指opensc.conf,是嗎?我們轉移到了另一個不受opensc支持的智能卡。所以我需要找到一個新的解決方案。幸運的是目前它正在運行。 – 2011-07-27 14:46:03