2015-07-02 78 views
2

我對使用客戶端令牌執行SSL/TLS的客戶端證書身份驗證感興趣,但客戶端私鑰駐留在(不可PKCS11訪問的)硬件令牌上。我原本想替換密鑰管理器,但我不能從令牌中返回私鑰,所以我正在考慮修改底層的SSLSocket和相關類來完成我的目標。帶硬件令牌密鑰的SSLSocket

在哪些Java類是建立TLS會話中使用的私鑰,以便我可以覆蓋該功能?還有其他建議嗎?

回答

1

我最終通過創建一個新的提供者來做到這一點。我的提供商註冊以下內容:

  • 實現PrivateKey的硬件設備抽象;我稱之爲「令牌」。
  • 擴展KeyStoreSpi的自定義密鑰庫。密鑰庫知道如何枚舉令牌中的證書和別名。
  • 自定義簽名對象,知道如何使用令牌執行簽名操作。我只需要爲我的類實現一個RSA/SHA簽名算法的子集。
  • 擴展SSLSocketFactory的自定義套接字工廠。我這樣做是爲了設置首選密碼套件。

提供程序將我的令牌註冊爲PKCS11設備,以避免在客戶端身份驗證期間(我使用自定義密碼提示輸入令牌PIN)的默認密碼提示。我將提供者放在提供者列表的頂部,創建了一個新的SSLContext並設置了SSLSocketFactory,並最終建立了連接。

-Djavax.net.debug = true在客戶端和服務器上始終是我的朋友。

相關問題