在试图自动编译和签名特定的基于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
进行签名,显然它没有任何问题。这看起来像cert + osslsigncode
问题,但我不知道到底是什么。
我还用另一个证书在完全相同的EXE上尝试了osslsigncode
,为了使事情更有趣,它成功了.(我注意到两个证书的证书路径不同)。
一些证书细节:
1)非工作证书
版本: V3
公钥: RSA 2048位
签名散列算法: sha1
签名算法: sha1RSA
认证路径: USERTrust -> Comodo代码签名CA 2 -> NonWorkingCert
2)工作证书
版本: V3
公钥: RSA 2048位
签名散列算法: sha1
签名算法: sha1RSA
认证路径: USERTrust -> UTN-UserFirst- -> Comodo代码签名CA 2 -> WorkingCert
发布于 2018-10-03 23:39:06
这花了我好几个小时的时间,但我想我现在明白了.
解决方案是将中间证书与主证书一起传递给osslsigncode
。(H/T to Tor项目确认这一点.)
openssl x509 -text -in cert.pem
完成,然后查找“授权信息访问-> "CA颁发机构”URI“。证书标识符(序列号等)也可以在”数字证书“选项卡->”查看证书“”->“证书路径下找到。
(提示:不要总是相信CA的支持页面有正确的信息来下载中间证书,在从CA的网页下载错误的中间证书之后,我浪费了很多时间。)openssl x509 -in my_intermediate_ca.crt -inform der -outform pem -out my_intermediate_ca.pem
或类似的格式。cat mycert.pem my_intermediate_ca.pem > certchain.pem
(如果代码签名证书不是链中的第一个,Windows将看到一个由中间证书“签名”的无效签名。)osslsigncode -certs certchain.pem ...
(注意:我也通过了-h sha256
和-ts http://timestamp.digicert.com
,尽管我认为所有的东西都可以与其他选项的组合一起工作。)https://stackoverflow.com/questions/25771066
复制相似问题