我可以使用 SAC 和
singtool.exe
在 Windows 上签署我的 Windows EXE。但这需要一台我无法轻松访问的 Windows 计算机。我主要在 Linux 上工作,Sectigo 支持人员告诉我这个过程在 Linux 上是可行的,但我遇到了问题。
我可以运行 SAC 并查看证书等。我已使用
pkcs11-tool
成功检查了证书:
pkcs11-tool --module /usr/lib/pkcs11/libeToken.so --login --list-objects
我发现了一些对
osslsigncode
的引用,但它们都在命令行中使用证书和密钥。
当 OV 证书捆绑包和私钥位于 Sectigo 的硬件令牌上时,我应该使用哪些工具和/或命令在 Ubuntu 上实际签署 Windows EXE?
我最终使用各种工具测试了各种方法:
pkcs11-tool
、p11tool
、p11-kit
。步骤如下:
运行
p11tool --provider=/usr/lib/libeTPkcs11.so --list-all
。这应该列出令牌的实际 URI。其他工具只提供其他证书的 URI,但不提供我的硬件令牌。
接下来,我不得不纠结使用哪个
pkcs11engine
。我尝试了这些帖子和其他地方提到的几个,但出现了错误。我终于找到了 pkcs11.so
我的一张照片:
/snap/core22/858/usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so
然后我必须构建命令行。我一开始只使用 URI 作为密钥,但这不起作用。所以我用这个命令找到了证书ID,
pkcs11cert
:
pkcs11-tool --module /usr/lib/pkcs11/libeToken.so --login --list-objects --id 01
ID 通过其他命令输出显示,但以带有冒号的形式显示,因此我不确定如何使用它(例如,
ID: xx:xx:xx:xx:xx:xx:xx:xx
)。
我终于登陆了这个命令行:
osslsigncode sign -askpass -verbose -h sha256 \
-pkcs11engine /snap/core22/858/usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so \
-pkcs11module /lib/libeToken.so \
-t http://timestamp.sectigo.com \
-pkcs11cert xxxx \
-key "pkcs11:model=xxxx;manufacturer=xxxx;serial=xxxx;token=xxxx;object=xxxx;type=cert" \
-in /path/to/executable_UNSIGNED.exe \
-out /path/to/executable_LINUX_SIGNED.exe
我有点厌倦了使用那个快照
pkcs11engine
,但它正在工作。我将继续完善这个流程,但目前我对进展感到满意。