1

我有个问题。我的组织需要为 XPI 文件类型执行代码签名。证书及其私钥必须由硬件安全模块保护。这是出于安全原因。

Mozilla 提供的现有 NSS Signtool 我们无法找到一种方法来获取该工具,以识别 Java 密钥库、Windows 中的 CSP 或 Mac 中的钥匙串。研究的所有解决方案都指向要求将密钥复制到 NSS Signtool 配置为默认使用的软件数据库中。

我需要对 XPI 文件类型进行签名,而我试图找到适用于 Java、Windows CSP 或 Mac 钥匙串的解决方案的原因是我现有的 Thales HSM 技术具有这 3 个选项作为与模块通信的接口.

我看到有一个名为 XPISigner 的基于 Java 的文件,但该解决方案不再受支持,我们发现的唯一版本仅与 Luna HSM 一起工作,但与今天的 Java 版本不兼容。

有没有人设法获得一个受 HSM 保护的密钥来使用 NSS Signtool?或者是否有任何机制可以将 NSS Signtool 与 java 密钥库集成?(使用 java 选项的想法是我可以操纵所述解决方案来使用我的 HSM)

谢谢!

4

1 回答 1

1

我能够使用从 nss-3.13.6 版本编译的 nsscapi.dll 拼凑出一个解决方案。然后,我将其他库依赖项复制到我的 nss-3.20 构建中,以用于我的整体应用程序。

nsscapi.dll 用于签署一段代码,是 NSS 的基本 PKCS11 到 Capi 模块接口。它显然存在内存泄漏问题,但由于我使用 NSS 的范围只是偶尔签署一个 XPI 文件,我可以偶尔重新启动该模块。

解决方案包括:使用 mozilla-build 构建的 nss-3.20,以及来自此包的“nss”子文件夹中的“make nss_build_all”。

Visual Studio C++ Redistributable 2015 x86 版本(32 位作为 64 位不适用于此项目)。

Thales CAPI 与 Windows 的接口(是的,它们有一个直接的 PKCS11 模块,但对于我的自定义环境,只有 CAPI 和 Java 密钥库是选项,所以我没有使用 Thales PKCS11 模块)

PATH 环境变量已修改为指向 NSS 构建中的 bin 和 lib 文件夹。

nsscapi.dll 位于 nss-3.20\dist\WIN95xxx\lib\ 文件夹中,使用“modutil”加载到 NSS 构建中:

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

我已经将 Thales 配置为将代码签名证书填充到 CAPI,因此我已经在 CAPI 中拥有了代码签名证书。

我必须使用 mmc.exe 中的“证书”管理单元来查看当前用户的“个人”证书存储。然后将我想使用的代码签名证书的“友好”名称修改为有意义的名称,例如“测试”。这样 NSSCAPI 模块可以在列表中唯一地识别该证书,该列表具有可见性。

在我的一个测试代码签名证书上更改友好名称的步骤之后,我使用 NSS 签名工具来显示可用证书的列表:

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

我将一个“test.xpi”文件解压到“c:\apps\certs”的“test”子文件夹中,这是我刚刚编的一个子文件夹名称,你可以使用你想要的。

我的清单包含一个条目:

  • 微软证书存储:测试

* 表示它是一个有效的证书,可用于 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,虽然我不知道到底有多好......

于 2015-10-08T20:37:22.600 回答