Ubuntu 22.04下用Sectigo硬件令牌签名Windows EXE的工具与命令
在Ubuntu上用Sectigo硬件令牌签名Windows EXE
所需工具
- osslsigncode:支持通过PKCS#11协议调用硬件令牌完成签名
- OpenSSL PKCS#11引擎:Ubuntu下可直接安装
openssl-engine-pkcs11包 - pkcs11-tool:你已在使用,无需额外安装
- Sectigo eToken驱动:已存在
/usr/lib/pkcs11/libeToken.so,无需额外配置
步骤1:确认令牌内的证书与私钥信息
先通过pkcs11-tool获取证书和私钥的标签、ID(后续签名命令需要用到这些标识):
pkcs11-tool --module /usr/lib/pkcs11/libeToken.so --login --list-objects
输出会包含类似以下内容,记录私钥和对应代码签名证书的ID或Label:
Private Key Object; RSA
label: "CodeSigningPrivateKey"
ID: 01
Certificate Object; type = X.509 cert
label: "CodeSigningCertificate"
ID: 01
步骤2:使用osslsigncode签名EXE
根据获取的ID/标签,选择以下任意一种方式执行签名:
方式1:通过ID指定证书和私钥(推荐,ID通常唯一)
osslsigncode sign \ -pkcs11engine pkcs11 \ -pkcs11module /usr/lib/pkcs11/libeToken.so \ -pkcs11id 01 \ # 替换为你记录的证书/私钥ID -h sha256 \ # Sectigo推荐使用SHA256哈希算法 -in input.exe \ # 待签名的原始EXE文件路径 -out signed.exe # 签名后的输出文件路径
执行时会提示输入硬件令牌的PIN码,直接输入即可(输入内容不会明文显示)。
方式2:通过标签和令牌名称指定
如果ID不明确,也可以用标签和令牌名称定位对象:
osslsigncode sign \ -pkcs11engine pkcs11 \ -pkcs11module /usr/lib/pkcs11/libeToken.so \ -pkcs11cert "pkcs11:token=SectigoToken;object=CodeSigningCertificate" \ -pkcs11key "pkcs11:token=SectigoToken;object=CodeSigningPrivateKey" \ -h sha256 \ -in input.exe \ -out signed.exe
将SectigoToken替换为你的令牌实际名称,CodeSigningCertificate/CodeSigningPrivateKey替换为对应的标签。
步骤3:验证签名有效性
签名完成后,用以下命令验证签名是否有效:
osslsigncode verify signed.exe
如果输出包含Signature verification: ok,则说明签名成功。
注意事项
- 确保
osslsigncode版本支持PKCS#11:Ubuntu 20.04及以上版本的官方包已支持,若版本过旧可编译最新版。 - 不要明文传递PIN:除非在非交互环境,否则避免使用
--pkcs11pin参数,让命令提示输入PIN更安全。 - 签名过程中不要拔出令牌:硬件令牌需全程保持连接状态。
内容的提问来源于stack exchange,提问作者nicorellius
相关产品推荐
相关产品推荐

