2013-08-06 50 views
4

我想在使用Java Applet的基於Web的應用程序中籤署一些數據(POST表單)。用戶的x509證書將位於加密/智能卡中。簽名需要以附件pkcs#7格式。在Java Applet中實現數字簽名

我使用本教程/代碼爲出發點構建小程序 - http://www.developer.com/java/other/article.php/3587361/Java-Applet-for-Signing-with-a-Smart-Card.htm

對我來說,最大的問題在這裏似乎是小程序要求用戶爲PKCS的位置#11執行的事實圖書館。對我來說這是一個很大的禁忌,因爲我的典型用戶不會知道他的pkcs#11庫的位置。

從Oracle的Java文檔 - http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html看來,Java沒有自帶的實現。

有沒有辦法執行此簽名而不詢問用戶這個位置。我很滿意這個解決方案只適用於Windows上的IE和Firefox。

隨着我使用了幾個智能卡/加密鎖,我注意到,當我插入它時,我可以在IE瀏覽器的證書中看到證書。這可能意味着當您插入卡時,密碼令牌會註冊其包含在操作系統中的所有證書,並在刪除卡時將其註銷。所以它可能必須暴露一些界面到OS /瀏覽器時 - 它可以不用於簽名嗎?

回答

3

我們在SecureBlackox產品的Distributed Cryptography附加組件中完成了您現在要做的事情(分佈式客戶端模塊簽名),併爲其他瀏覽器提供了IE和Java小程序的ActiveX控件。

不幸的是,PKCS#11 DLL沒有在任何地方註冊,因此您無法避免詢問用戶該DLL的位置。

大多數硬件設備同時支持PKCS#11和CryptoAPI接口。在CryptoAPI接口內,CSP DLL將基於硬件的證書暴露給CryptoAPI引擎,從而暴露給應用程序。在這種情況下,您可以使用與Windows CryptoAPI配合使用的Java類。因爲Java不能實現它自己--JVM不是一個硬件,並且不包含證書(即使這樣做,那也不能解決你的問題)。因此,PKCS#11是一個接口,由硬件供應商實現,所以Java不能實現它自己的JVM不是硬件,也不包含證書。我需要注意的是,Firefox內置了PKCS#11驅動程序,通過它,Firefox可以訪問自己的證書。這是爲了統一支持軟件和硬件存儲的證書。

+0

'在這種情況下,您可以使用與Windows CryptoAPI一起使用的Java類。「您能否詳細說明 - 這些類是哪些類? – user93353

+0

@ user93353請搜索「sunMSCAPI」 - 這就是您需要的。我不知道Java內幕足以向你提供實現的細節。 –

+0

順便說一句,也許你可以找到上面提到的插件有用,而不是花時間在你自己的。你可以在https://www.eldos.com/sbb/desc-dc.php上查看它 –