2011-08-09 73 views
4

我使用CardOS API司機從西門子作爲PKCS#11驅動程序如下加載從PKI卡證書:PKCS#11驅動程序會提示輸入PIN每個鍵

char[] pin = "123456".toCharArray(); 
KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(pin); 
KeyStore keyStore = KeyStore.Builder.newInstance("PKCS11", Security.getProvider("SunPKCS11-verinice"), pp).getKeyStore(); 
keyStore.load(null,pin); 
keyStore.getKey("key 1", pin); 
keyStore.getKey("key 2", pin); 

駕駛員提示爲每個PIN碼鍵雖然我把它作爲參數傳遞。是否有其他方式通過API傳遞PIN碼?有什麼「密碼緩存」我可以激活?

回答

2

我也在使用CardOS和西門子卡。

卡上有兩個PIN碼。

  1. 卡PIN。用於解鎖卡並讀取證書。您可以使用自己的回撥來處理此PIN碼。 PIN只需要一次。
  2. 簽名PIN碼。用於訪問合格的簽名證書。必須爲每個簽名輸入此PIN碼。 PIN對話框來自西門子中間件,您不能解僱它。

在大多數情況下,兩個PIN碼都是相同的(否則用戶會感到困惑)。 我也有一張沒有簽名PIN的卡。有了這個,我可以簽署沒有另一個PIN碼輸入也許您可以刪除簽名PIN碼或獲取沒有簽名PIN碼的卡片。

5

您可以使用能夠處理PasswordCallback的自定義CallbackHandler,如section 3.1 of the Java PKCS#11 guide中所述。當然,緩存密碼應該適當謹慎。

+0

我已經試過這個,但也不適合這個驅動程序。我仍然得到一個Windows(不是Java)彈出框來輸入PIN。 –

2

您應該從您的PKCS#11供應商那裏詢問,這裏是西門子。 Java可能沒有什麼可以做的。