问题标签 [signtool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1720 浏览

openssl - 使用 osslsigncode 进行代码签名 - Publisher Unknown

在尝试自动编译和签名特定的基于 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 收到“Succeeded”消息,好像签名正常,但是当二进制文件在 Windows(本例中为 Win 7)上运行时,UAC 说:

发布者:未知

奇怪的是,当我打开从原始.p12文件中提取的证书,查看它的信息时,Windows 之后能够识别发布者和数字签名,好像它以某种方式意识到了证书路径......?

任何意见,将不胜感激。

使用的编辑 1
osslsigncode 版本:1.5.2 和 1.7.1

编辑 2
为了比较,我尝试用 签名SignTool,显然它没有任何问题。所以这看起来像 cert + osslsigncodeissue,但我不知道它到底是什么。

我还osslsigncode用另一个证书尝试了完全相同的 EXE,为了让事情更有趣,它起作用了......(我注意到 2 个证书的证书路径不同)。

一些证书详细信息:

1)非工作证书
版本:V3
公钥:RSA 2048 bits
签名哈希算法: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

0 投票
2 回答
4290 浏览

pfx - pvk2pfx 不允许我使用空私钥密码创建 pfx 文件

我们使用 openssl 创建了证书请求和私钥,如下所示

我们将 CSR 发送出去,经过验证,我们取回了 spc 文件。现在我想用signtool签署我的代码。显然,我需要生成一个结合 spc 和私钥的 pfx 文件,所以我调用

该程序要求输入密码,但我们从未在私钥上设置密码。我们只是按下回车键。如果我们尝试在对话框中按 Enter 键,我们会得到

如果我们尝试任何其他文本,我们会得到

我还尝试使用 signtool 和向导,它显然接受了分离的 spc 和 pvk。当我指定私钥(来自磁盘,CSP:Microsoft 强加密提供程序,提供程序类型 RSA Full)时,我得到

有什么建议吗?

0 投票
1 回答
932 浏览

ssl - 提取证书部分以使用 OpenSSL 签署文件

我希望使用以下命令签署 .mobileconfig 文件:

我有一个请求并安装在我的机器上的 SSL 证书,以及一个请求并安装在我的机器上的代码签名证书。

现在我应该使用哪个证书(代码签名或 SSL?),以及如何获取your-cert.pem,your-priv-key.pemTheCertChain.pem文件?

再次访问 GoDaddy 只会给我一个 .pem 文件,我什至不知道是哪个。

在 GoDaddy 的 .pem 上运行openssl x509 -in godaddy.pem -inform pem -noout -text会得到以下结果:

0 投票
6 回答
16138 浏览

c# - 使用 signtool.exe 自动进行代码签名,但不存储证书或密码

我在 Visual Studio 2013 中有一个 C#/.NET 4.5 x64 项目。不止一个开发人员在这个项目上工作,所以代码是在 Git 中管理的。我正在签署已编译.dll的 s 和.exewith signtool.exe。我的公司购买了代码签名证书,如果我从命令行手动签名,如下所示:

...然后看起来一切都很好:我收到一条成功消息,并且 Windows 资源管理器中已编译 DLL 的属性显示它已正确签名。所以,我对实际的签名过程没有任何问题。

但是,证书及其密码不得存在于 Git 中。它们将带外提供给项目中的所有开发人员。我可以假设每个开发人员在构建项目时都会将证书存储在计算机上的预定义位置,并且他会知道密码。

所以,这是我的问题:如何配置 Visual Studio 2013 以自动签署其编译输出而不在 Git 中保留证书或其密码?我希望它尽可能简单,一旦开发人员在预定义的路径(或导入,或其他)中拥有证书,并假设开发人员知道证书的密码,在 Visual Studio 中单击“构建” 2013 只是构建并签署它,没有提出任何问题。

如果签名过程可以是非交互式的(没有密码提示),那是一个好处。最终,这将成为持续集成 (CI) 服务器的一部分,该服务器也可以对其输出进行签名,并且由于它是自动化的,因此没有人会在那里输入密码。但是,我现在会采取任何解决方案。

我的证书是 PKCS #12 格式,并受密码保护。Windows 声称它没有标记为导出。

0 投票
1 回答
553 浏览

c# - SignTool 错误 --> 我无法为我的应用程序创建一个包,只能为这个应用程序创建一个包

这是我尝试创建应用程序包时遇到的错误。

0 投票
0 回答
480 浏览

visual-studio - 使用 SHA256RSA 签署 ClickOnce 清单的未知发布者

我创建了一个自签名 CA 证书并将其放在当前用户受信任的根证书颁发机构证书存储中。然后,我使用以下方法创建了软件发布者证书:

...并将生成的文件合并到一个 pfx 文件中,如下所示:

我继续使用这个 pfx 文件使用 Visual Studio (2013) 签署一个简单控制台应用程序的 ClickOnce 清单,一切都很好。但是,在测试生成的 Setup.exe 时,我注意到应用程序安装 - 安全警告对话框报告发布者未知。

按照这个 MSDN 指南,我设法通过排除-a sha256标志使事情按预期工作,结果是:

我不明白这个。为什么指定-a sha256SPC 会导致发布者“未知”(以及看起来更加愤怒的对话、黄色盾牌等等)?


编辑:实际上,它变得有点奇怪;我只是尝试更改为-a sha512这也有效

0 投票
1 回答
1306 浏览

hash - 如何使用 signtool.exe 在 exe 文件中嵌入哈希

我正在使用 signtool.exe 对 exe 文件进行签名。我正在尝试将我的 exe 文件与 .pfx 证书以及 exe 的签名哈希(使用 openssl 生成的签名哈希)一起嵌入。我只能用证书签名。但我也需要将签名的哈希嵌入到 exe 中。可能 signtool.exe 签名 /as可能会有所帮助。/as选项不期望任何参数,因此无法在那里传递我的哈希。

有人可以帮我用证书和哈希签署我的 exe。

谢谢,

0 投票
1 回答
11595 浏览

certificate - 带有证书的签名工具存储在本地计算机中

我无法让 signtool 找到我的证书。pfx 文件用于签名,我已经通过直接指定 pfx 文件和密码来检查它。但是由于其他人可以访问代码存储库,我真的不想在那里存储证书+密码。

这就是为什么我在“受信任的根证书颁发机构”中的构建服务器(作为本地计算机,而不是每个用户)上安装了 pfx(来自 symantec)。这是因为 Jenkins 是使用本地系统帐户启动的。

这就是我目前正在尝试的:

/sm / s Root - 这应该告诉 signtool 切换到“本地机器”存储,对吧?并且 Root 应该指定“受信任的根证书颁发机构”?

/n - 这里我使用证书中的“颁发给”值,即公司名称。

我遇到以下错误:

我今天浏览了这么多链接,试图找出我做错了什么。我已经在 mmc 中检查了本地计算机上的证书管理单元,并且证书正在“受信任的根证书颁发机构”中重新注册。

0 投票
2 回答
4225 浏览

continuous-integration - 如何安全地配置 CI 服务器以对二进制文件进行数字签名?

有许多网站解释了如何signtool.exe.pfx证书文件上运行,归结为:

我有一个持续集成 CI 流程设置(使用 TeamCity),它像大多数 CI 流程一样,做所有事情:检查源代码、编译、签署所有 .exe、打包到安装程序中,并签署安装程序 .exe。当前有 3 个构建代理,运行相同的虚拟机,其中任何一个都可以运行此过程。

不安全的实施

今天为了实现这一点,就安全性而言,我做了几件坏事(TM):.pfx 文件在源代码管理中,它的密码在构建脚本中(也在源代码管理中)。这意味着任何有权访问源代码存储库的开发人员都可以获取 pfx 文件并做他们想做的任何邪恶的事情。(我们是一个相对较小的开发商店,相信每个人都可以访问,但显然这仍然不好)。

终极安全实施

关于“正确”执行此操作,我所能找到的只是您:

  • 将 pfx 和密码保存在某个安全介质上(例如具有基于手指解锁功能的加密 USB 驱动器),并且可能不会放在一起
  • 仅指定几个人有权访问签名文件
  • 仅在未连接的专用机器上签署最终版本,该机器保存在锁定的保险库中,直到您需要将其拿出来参加此代码签名仪式。

虽然我可以看到这个安全性的优点..这是一个非常繁重的过程,并且在时间方面很昂贵(运行这个过程,安全地保存证书备份,确保代码签名机处于工作状态等)。

我敢肯定有些人会跳过步骤,只是使用存储在他们个人系统上的证书手动签署文件,但这仍然不是很好。

它也与随后在安装程序中使用的签名文件(也由构建服务器构建)不兼容 - 当您安装了具有 UAC 提示以获取管理员访问权限的 .exe 时,这一点很重要。

中间地带?

我更关心的是不向用户提供可怕的“不受信任的应用程序”UAC 提示,而不是证明它是我的公司。同时,将私钥和密码存储在每个开发人员(加上 QA 和高级技术支持)都可以访问的源代码存储库中显然不是一个好的安全实践。

我希望 CI 服务器在构建过程中仍然像今天一样签名,但没有密码(或证书的私钥部分),每个有权访问源代码存储库的人都可以访问。

有没有办法让密码不被构建或以某种方式保护?我是否应该告诉 signtool 使用证书存储(以及如何使用 3 个构建代理和构建作为非交互式用户帐户运行)?还有什么?

0 投票
2 回答
2753 浏览

windows - 使用 SHA-2 交叉签名证书使用 signtool 进行签名和验证后,Windows 驱动程序安装失败

我有两个驱动程序文件似乎已经正确地被singned:

但是当我尝试安装它们时,我得到了清除错误:

Windows 无法验证此文件的数字签名。最近的硬件或软件更改可能安装了签名不正确或损坏的文件,或者可能是来自未知来源的恶意软件。

我已经发布了有问题的文件以及相关的 certs。我使用以下命令创建文件:

我的证书使用签名算法:sha256WithRSAEncryption

接下来我应该尝试什么?