install4j:在同一台机器上自动化 Windows 扩展验证代码签名和 Apple 公证?

install4j: Automating Windows Extended Validation Code Signing and Apple Notarization on the same machine?

我们正在考虑切换到扩展验证 (EV) 代码签名证书。

为了完全自动化 Apple 的公证,我们不得不将我们的构建机器切换到 Mac mini。

阅读 , and how to automate it,出现了两个问题:

可以自动输入硬件令牌 (HSM) 的密码吗?

comment from Ingo Kegel on this SO question 似乎表明您可以通过 --win-keystore-password=<password> 命令行选项传递 HSM 密码。

对吗?

多平台构建是否仍然可以在一台机器上进行(Mac mini)?

install4j help提到'different platforms':

On Windows, such a hardware token can be usually accessed through the Windows keystore. On a different platform, you have to choose the "Hardware security module PKCS #11 library" option and configure a native library that provides access to the keystore in the HSM through the PKCS #11 API.

是否有 MacOS 的 PKCS #11 库?库选择对话框要求一个 DLL...

The comment from Ingo Kegel on this SO question seems to indicate that you can pass the HSM password via --win-keystore-password= command line option.

是的,没错。此选项可用于 non-Windows 平台以及 Windows 可执行文件的代码签名。

Can a multi-platform build still happen on a single machine (the Mac mini)?

是的,涉及公证的 multi-platform 构建只能在 macOS 上执行,因为 Apple 不允许 macOS 以外的公证请求。

Are there PKCS #11 libraries for MacOS? The library selection dialog asks for a DLL...

您的 HSM 需要一个库,这将是 Linux 上的 .so 文件或 macOS 上的 *.dylib 文件。我为文件选择器创建了一个问题,以根据当前平台显示正确的文件过滤器。

这样的库是否可用于 macOS 取决于 HSM。这些库由 Java 密码学 Api (JCA) 加载,而 install4j 在这方面没有 Windows-specific 代码。

根据 Ingo Kegel 的回答,我快速浏览了常见的 HSM 令牌及其库支持。在这里编译仅供将来参考(我现在无法实际测试)。

DigiCert 和 Sectigo 的 USB 令牌 (HSM) 似乎是 SafeNet eToken.

的某个版本

SafeNet 显然被 Gemalto 收购,而后者又被 Thales 收购。

DigiCert 和 Sectigo 都提供 SafeNet eToken 驱动程序和身份验证客户端的下载(Window/MacOS/Linux)。我在 Thales 网站上找不到任何下载。

post about signing PDF documents on MacOS Sierra using the SafeNet eToken 5100 有显示驱动程序文件的屏幕截图:

/usr/local/lib/libeTPkcs11.dylib

我可以确认我们设法获得了这个 运行(Windows EV 代码签名和 Apple Notarization 在 Mac mini 上自动化):

  • 买了Sectigo EV Code Signing Certificate
  • 将交付的 SafeNet eToken 5110(USB Dongle)附加到 Mac mini
  • 已安装 SafeNet Authentication Client(在 Mac mini 和 Windows 上都用于测试)
  • 从令牌中导出证书以查看证书链
  • 从 Windows 密钥库(certmgr.msc)导出链证书
  • 将链证书导入令牌(显然一些发行人会为您做这件事并交付一个不仅包含签名证书而且包含它的链的令牌)
  • 如果无法将证书添加到令牌中,可以通过编译器变量将它们提供给目录中的 install4j sys.ext.certDir
  • 配置install4j code signing使用 SafeNet 身份验证客户端提供的 PKCS11 库:/usr/local/lib/libeTPkcs11.dylib
  • 用于在 Windows 上进行测试:C:/Windows/System32/eTPKCS11.dll
  • 最后:不再有 SmartScreen 消息