2012-05-16 41 views
0

我們正在開發一個新的安全項目。 我們希望啓用服務器端和客戶端認證。 要允許客戶端身份驗證,我們希望創建可以放入「讀卡器」並使用指紋解鎖的卡片。PKI - 讀卡器更換

現在,我們有一些公司A的讀卡器,爲了我們的客戶端(java - 不是瀏覽器,而是我們自己的小軟件)使用該卡上的證書,java程序使用本地調用一個DLL,使我們能夠認同它。

我正在尋找一種方法,使這個連接讀卡器通用的,如果我們改變讀卡器到B公司

我的問題是:

  1. 有沒有更好的訪問證書讀卡器的方法?例如,使用純Java代碼(或純JDK代碼),並仍然以某種方式撤回證書和所需的所有其他操作。

  2. 鑑於沒有純Java的方式來做到這一點,有沒有一種通用的方式,將幫助我不依賴於特定的.dll?

  3. 您認爲這有多擔保?也許,沒有讀卡器的客戶端身份驗證有同樣安全的方法嗎?

+2

你可能想看看pkcs11。它是這些事物的標準接口。我已經編寫了使用它的軟件,但沒有使用java(openssl - 在c中擴展相當容易)。無論如何,我會建議谷歌搜索java pkcs11庫。 –

回答

2

Oracle JRE附帶Sun PKCS#11 provider,它允許您插入實現PKCS#11 API的DLL。

就Java而言,這絕對是「標準」方式。您的智能卡可以作爲KeyStore實例加載。如果您的密鑰無法從智能卡中提取,則仍會創建一個PrivateKey對象用於您的應用程序簽名/解密中,但您將無法提取私有指數(假設RSA在此處):它將委託操作按照設計的卡片。

(我已經在過去與OpenSC/OpenCT試過成功在Linux機器上。我相信PKCS#11是針對Windows較爲少見,但一些智能卡供應商可能仍然提供的接口吧。)

這將如何安全取決於您使用的PKCS#11實施。調整您自己的DLL以使其適合PKCS#11,在您稱之爲「安全」之前,您肯定需要付出一些努力並進行審查。

+1

只需注意:由於與CSP相比,PKCS#11提供的功能要好得多,所以我們遇到的所有供應商(大概十幾個)都提供了用於Windows的PKCS#11 DLL。 –

0

一種選擇是位於讀卡器設備驅動程序和Java應用程序之間的中間件。這樣,您的應用程序只與中間件庫進行交互,並且不需要關心直接訪問DLL或您使用的硬件類型,甚至是太陽PKCS11提供程序。如果安裝了新的讀卡器,中間件將與驅動器進行交互。您可以訪問您的證書,但是如果生物識別數據(指紋)存儲在智能卡上(而不是在您的服務器上),中間件可以幫助您訪問。一家生產這種中間件的公司是Active Identity。