Les*_*ess 3 openssl nsis code-signing signtool
在尝试自动编译和签署特定的基于 NSIS 的二进制文件时,我遇到了一些奇怪的行为。即,makensis运行 来wine编译可执行文件,然后osslsigncode使用 来对二进制文件进行签名。
可执行文件似乎构建得很好,因为它可以在 Windows 系统上运行,但是签名存在问题(缺乏更好的词)。由于代码签名证书采用 PKCS#12 格式,因此使用的命令如下所示:
osslsigncode sign -pkcs12 <pkcs12-file> -pass <pkcs12-password> \
-n "Your Application" -i http://www.yourwebsite.com/ \
-in yourapp.exe -out yourapp-signed.exe
我从 osslsigncode 收到“成功”消息,就好像签名顺利一样,但是当二进制文件在 Windows 上运行时(本例中为 Win 7),UAC 表示:
出版商:未知
奇怪的是,当我打开从原始.p12文件中提取的证书并查看其信息时,Windows 随后能够识别发布者和数字签名,就好像它以某种方式意识到了证书路径......?
任何意见,将不胜感激。
使用的编辑1
osslsigncode版本:1.5.2和1.7.1
编辑2
为了进行比较,我尝试使用 进行签名SignTool,显然它的工作没有任何问题。所以这看起来像证书+osslsigncode问题,但我不知道它到底是什么。
我还尝试osslsigncode使用另一个证书使用完全相同的 EXE,并且让事情变得更有趣,它起作用了......(我注意到这两个证书的认证路径不同)。
一些证书详细信息:
1)非工作证书
版本:V3
公钥:RSA 2048 位
签名哈希算法:sha1
签名算法:sha1RSA
认证路径:USERTrust -> Comodo Code Signing CA 2 -> NonWorkingCert
2)工作证书
版本:V3
公钥:RSA 2048 位
签名哈希算法:sha1
签名算法:sha1RSA
认证路径:USERTrust -> UTN-UserFirst-Object -> Comodo Code Signing CA 2 ->workingCert
这让我困惑了好几个小时,但我想我现在明白了。
解决方案是将中间证书osslsigncode与主证书一起传递。(H/T to Tor Project 确认这一点。)
找到正确的中间 CA 证书。可以通过以下方式完成openssl x509 -text -in cert.pem,然后查找“权威信息访问 -> “CA 颁发者”URI。证书标识符(序列号等)也可以在 Windows 中的“数字证书”选项卡 -> “查看证书” -> “认证路径”。
(提示:不要总是相信 CA 的支持页面提供了要下载哪个中间证书的正确信息,在从 CA 的网页下载了错误的中间证书后,我浪费了很多时间。)
openssl x509 -in my_intermediate_ca.crt -inform der -outform pem -out my_intermediate_ca.pem或类似格式。将完整的 CA 链放入一个 PEM 文件中,首先是代码签名证书:cat mycert.pem my_intermediate_ca.pem > certchain.pem
(如果代码签名证书不是链中的第一个,Windows 会看到由中间证书“签名”的无效签名。)
跑步osslsigncode -certs certchain.pem ...
(注:我也通过了-h sha256&-ts http://timestamp.digicert.com尽管我认为一切都可以与其他选项组合一起使用。)
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |