我能夠使用從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」這個子文件夾名稱的「測試」子文件夾中,您可以使用您想要的子文件夾名稱。
我的目錄包含的條目:
*表示它是可用於在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,儘管我不知道它究竟有多精確......