如何使用osslsigncode进行代码签名

8

你能帮我找出如何使用证书对我的软件进行签名吗?你知道signtool只能在Windows机器上工作,但我需要在Linux服务器上签署文件。现在系统的工作方式是,在Linux服务器上构建文件,然后将其移动到Windows服务器进行签名,然后再次返回到Linux。

我尝试谷歌并找到了使用osslsigncode程序签名的新方法。

我的问题现在是如何将MS证书转换为osslsigncode格式。 所以现在我执行以下步骤 永久拥有两个文件: cert.crt和key.blob 首先我需要将它们转换为.pfx格式 我这样做:

openssl rsa -inform MS/PRIVATEKEYBLOB -in key.blob -outform PEM -out key.pem
openssl rsa -in key.pem -outform PVK -pvk-strong -out key.pvk
pvk2pfx -pvk key.pvk -pi 1234 -spc cert.crt -pfx cert.pfx

然后我可以使用命令签署我的软件。
signtool.exe sign /v /f cert.pfx /p 1234 soft.exe

你能告诉我使用osslsigncode程序需要执行哪些转换步骤吗?

1个回答

10

签署可执行文件有几种方法。第一种方法是直接使用.pfx文件对可执行文件进行签名,而无需提取它,具体如下:

osslsigncode sign \
  -pkcs12 code-sign-certificate.pfx \
  -askpass \
  -n "Program Name" \
  -i https://www.program-website.com \
  -in program.exe \
  -out program-signed.exe

(使用 -askpass 提示输入密码比创建一个包含密码的硬盘脚本更加安全。内存比写入磁盘的数据更易消失。)

另一种方法是将密钥从密钥库导出为 PKCS12 文件并使用 openssl 进行转换:

openssl pkcs12 -in authenticode.pfx -nocerts -nodes -out key.pem
openssl pkcs12 -in authenticode.pfx -nokeys -nodes -out cert.pem
openssl rsa -in key.pem -outform DER -out authenticode.key
openssl crl2pkcs7 -nocrl -certfile cert.pem -outform DER -out authenticode.spc

然后:

osslsigncode \
  -spc authenticode.spc \
  -key authenticode.key \
  -t http://timestamp.verisign.com/scripts/timstamp.dll \
  -in install.exe \
  -out install-signed.exe

新版本的osslsigncode可能需要不同的参数:

osslsigncode \
  -certs \
  -spc authenticode.spc \
  -key authenticode.key \
  -t http://timestamp.digicert.com \
  -in program.exe \
  -out program-signed.exe

替代的时间戳服务器URL如下:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接