首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用osslsigncode的代码签名-发行者未知

使用osslsigncode的代码签名-发行者未知
EN

Stack Overflow用户
提问于 2014-09-10 16:59:02
回答 1查看 2.1K关注 0票数 2

在试图自动编译和签名特定的基于NSIS的二进制文件时,我遇到了一些奇怪的行为。也就是说,makensiswine下运行以编译可执行文件,然后使用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

EN

回答 1

Stack Overflow用户

发布于 2018-10-03 23:39:06

这花了我好几个小时的时间,但我想我现在明白了.

  • Windows有其可信证书的内部数据库。这些包括根证书(由Windows安装和更新)和其他中间CA证书,这些证书是它在不同时间看到的(由根证书或其他可信证书签名)。
  • 当Windows/UAC在启动时检查可执行签名时,它会在本地数据库中查找已对嵌入在可执行签名中的证书的根进行签名的受信任证书。
  • 如果Windows找不到可信的签名证书(可能是因为嵌入的证书是用中间证书(而不是根证书)签名的,中间证书不在本地数据库中),则会导致未知发布服务器。
  • 如果您查看可执行属性的“数字签名”选项卡,Windows将更进一步,并自动尝试下载和安装任何由其本地证书之一信任的有效中间证书。一旦将此中间证书添加到Windows的本地证书存储中,可执行启动时的签名检查也将开始传递(即显示正确的发布服务器)。(这个MSDN回答解释了逻辑,尽管它们描述的根本原因--根证书还没有更新--是不同的。

解决方案是将中间证书与主证书一起传递给osslsigncode。(H/T to Tor项目确认这一点.)

  • 找到正确的中间CA证书。可以通过openssl x509 -text -in cert.pem完成,然后查找“授权信息访问-> "CA颁发机构”URI“。证书标识符(序列号等)也可以在”数字证书“选项卡->”查看证书“”->“证书路径下找到。 (提示:不要总是相信CA的支持页面有正确的信息来下载中间证书,在从CA的网页下载错误的中间证书之后,我浪费了很多时间。)
  • 将所有证书转换为PEM格式,如果有必要,可以使用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,尽管我认为所有的东西都可以与其他选项的组合一起工作。)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25771066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档