2016-01-04 63 views
1

我需要在64位Windows上使用帶有Java 7的PKCS#11,以便從智能卡讀取證書。 The oracle docs表示沒有適用於64位Windows的Sun PKCS#11提供程序。如果我理解正確,這意味着即使我有一個PKCS#11本機庫,我也沒有Java「橋」類與本機PKCS#11實現進行交互。我有什麼選擇?我能想到這些:Java 7上的PKCS#11 Windows 64位

  • 使用外部程序,例如,一個命令行實用程序與智能卡交互並將輸出傳送到我的Java應用程序
  • 以某種方式實現Java中缺少的PKCS#11提供程序? (我想避免這項工作)
  • 使用第三方Java庫來實現缺少的Sun提供程序?

經過大量搜索,我還沒有找到解決方案。最接近的是OpenJDK實現,但我無法從Oracle JDK切換到OpenJDK。

我錯過了什麼嗎?爲什麼沒有明顯的解決方案?我有什麼選擇?

非常感謝。

回答

1

Java 7本身沒有選項的原因是您使用的是報廢產品。您應該真正升級到Java 8.

也就是說,Sun/Oracle PKCS#11提供程序基於PKCS#11 wrapper from IAIK。由於Java 8的提供者有64位版本,那麼這可能意味着也可以爲Java 7編譯它。

但是,即使你得到包裝工作,那麼這並不一定意味着你得到的Java 7提供商與它一起工作。 Java 7提供程序也需要進行簽名,所以即使您可以使提供程序與Java 7 PKCS#11提供程序一起工作,您也可能會遇到問題。但是,您可以直接使用PKCS#11功能。當然,你會失去提供商的好處,主要是與TLS,XML-digsig等更高級API的互操作。

當然,IAIK也出售自己的提供商,這已經過安全評估等。文檔如下:

注意,如果您的加密硬件有64位PKCS#11模塊,則還必須使用64位版本的Wrapper本機庫,並且還必須使用64位版本的「 bit Java™VM(例如java -d64 ...)。

+0

我已經使用了IAIK提​​供程序。它運作良好。 – EJP

+0

是的,如果你準備咳嗽麪糰,可能是最好的/最簡單的選擇。註冊後有可用的評估版本。 –

+0

謝謝。看起來我們將轉換到Java 8。 – Atuos

0

所有選項都是可能的。

外部程序要求您爲每個平臺編寫本機代碼。

實現缺少的提供者可能是可能的,尤其是在OpenJDK中存在的情況下,您可以從那裏借用它(如果許可證允許)。

至於第三方庫 - 我只知道我們自己的SecureBlackbox,它在內部實現所有安全性,並通過JNI與PKCS#11設備協同工作。