问题:在基于 Linux 的发行版上签署 Windows 应用程序

我准备了一个应用程序和网站,客户可以在其中为该应用程序设置几个选项,然后再下载它。设置以二进制格式存储在文件末尾(附加),然后将编辑后的文件发送给最终用户。问题是文件“内容”的更改会破坏文件签名 - 是否有机会使用任何命令行工具重新签署这个更改的文件?我尝试使用 Microsoft 的 SignTool,但它在 Linux 上无法正常工作。

解答

使用Mono的 signtool 来做其实很简单;棘手的部分(在链接的 Mozilla 文章中更详细地描述)是以正确的格式将证书从 Windows 复制到 Linux。

将 Windows PFX 证书文件转换为 PVK 和 SPC 文件,只需在将证书从 Windows 复制到 Linux 时进行一次;

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

实际上签署 exe 是直截了当的;

signcode \
 -spc authenticode.spc \
 -v authenticode.pvk \
 -a sha1 -$ commercial \
 -n My\ Application \
 -i http://www.example.com/ \
 -t http://timestamp.digicert.com/scripts/timstamp.dll \
 -tr 10 \
 MyApp.exe
Logo

更多推荐