2015-10-05 25 views
1

我有一個問題。我的組織需要爲XPI文件類型執行代碼簽名。證書及其私鑰必須由硬件安全模塊保護。這是出於安全原因。配置NSS Signtool以使用Thales HSM?

由Mozilla提供的現有NSS Signtool,我們尚未找到獲取該工具的方法,以識別Java密鑰庫,Windows中的CSP或Mac中的鑰匙串。所研究的所有解決方案都指向要求將密鑰複製到NSS Signtool默認配置爲使用的軟件數據庫中。

我需要簽署XPI文件類型,我試圖找到一個適用於Java,Windows CSP或Mac keychain的解決方案,原因是我現有的來自Thales的HSM技術有3個選項作爲接口與模塊進行通信。

我看到有一個名爲XPISigner的基於Java的文件,但該解決方案不再受支持,並且我們發現的唯一版本與Luna HSM獨有的方式不兼容,與當前的Java版本不兼容。

有沒有人設法讓HSM保護密鑰與NSS Signtool一起工作?或者是否有任何機制將NSS Signtool與Java密鑰庫集成? (使用java選項的想法是我可以操縱所述解決方案以使用我的HSM)

謝謝!

回答

1

我能夠使用從nss-3.13.6構建編譯的nsscapi.dll拼湊解決方案。然後我將其他庫依賴關係複製到我的nss-3.20版本中,以用於我的整體應用程序。

nsscapi.dll是用於簽署一段代碼的目的,是NSS的Capi模塊接口的基本PKCS11。它顯然有內存泄漏問題,但由於我使用NSS的範圍偶爾會簡單地簽署一個XPI文件,所以偶爾重新啓動該模塊可以。

解決方案涉及: 使用mozilla-build構建的nss-3.20,以及此包的「nss」子文件夾中的「make nss_build_all」。

Visual Studio C++ Redistributable 2015 x86版本(32位爲64位不適用於此項目)。

泰雷茲CAPI界面窗口(是的,他們有直接的PKCS11模塊,但我的個性化環境中只能CAPI和Java密鑰庫是選項,所以我沒有使用泰利斯PKCS11模塊)

PATH環境變量是修改爲指向NSS構建內的bin和lib文件夾。

nsscapi.dll坐落在NSS-3.20 \ DIST \ WIN95xxx \ LIB \文件夾中加載到NSS生成使用 「modutil工具」:

modutil -dbdir "c:\apps\certs" -add "capi" -libfile "C:\Apps\nss-3.20\dist\WIN954.0_DBG.OBJ\lib\nsscapi.dll" -mechanisms RSA:DSA:RC2:RANDOM 

我已經有泰利斯公司配置來填充代碼簽名證書CAPI,所以我已經在CAPI進行了代碼簽名認證。

我不得不使用mmc.exe中的「證書」管理單元來查看當前用戶「Personal」證書存儲區。然後修改我想使用的代碼簽名證書的「友好」名稱,以表示「測試」。這樣NSSCAPI模塊就可以在清單中唯一識別出具有可見性的證書。

在我的測試代碼簽名證書的一個改變的友好名稱的那一步之後,我用NSS signtool顯示可用證書列表:

signtool -d "c:\apps\certs" -L 

我拉開了「test.xpi」文件到「c:\ apps \ certs」這個子文件夾名稱的「測試」子文件夾中,您可以使用您想要的子文件夾名稱。

我的目錄包含的條目:

  • Microsoft證書存儲:測試

*表示它是可用於在NSS

代碼簽名

然後我用一個有效的證書signtool簽署我的測試XPI文件中的代碼:

signtool -d "C:\Users\mlawson\AppData\Roaming\Mozilla\Firefox\Profiles\4jnnnb1y.default" -k "Microsoft Certificate Store":"test" test/ 

成功!

如果我的這個答案的格式是關閉的,我很抱歉。這是我第一次發佈堆棧溢出,並回復帖子(即使它是我自己的)。我隱藏了這篇文章中的一些高級步驟,以保持簡短,因爲一些更大的「如何」做類似構建NSS的事情,已經記錄在Mozilla的網站上。 Thales相關配置由Thales記錄,與解釋如何配置相關無關,因爲我的CAPI界面的用例是自定義和專有的。但是,使用nsscapi.dll和此解決方案的整體概念,實際上適用於任何與MSCAPI綁定並能夠與NSS一起使用的任何方法。 nsscapi.dll也可以作爲模塊加載到firefox「安全設備」中,以便firefox也可以使用CAPI,儘管我不知道它究竟有多精確......