当我尝试使用signtool签名应用程序时,为什么会出现“指定的PFX密码不正确”的错误?

13

我按照这个链接签署我的exe应用程序。

  • 我在Windows 7上安装了SDK工具,

  • 运行C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin>makecert.exe -sv App-O.pvk -n "CN=MY DIGITAL KEY" App-O.cer

会话框打开以提供密码:

enter image description here

我输入了密码:'fess'

新窗口打开:

enter image description here

我输入了:'fess'

#成功

文件App-O.cer和App-O.pvk已创建。

现在我生成pfx:

pvk2pfx.exe -pvk App-O.pvk -spc App-O.cer -pfx App-O.pfx

打开对话框以提供密码:

enter image description here

我粘贴了'fess'

文件pfx已创建。

现在我运行signtool:

 C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin>signtool.exe sign /f "App-O.pfx" /p fess "C:\Output\setup.exe"

这里出现了错误:

SignTool Error: The specified PFX password is not correct.

Number of files successfully Signed: 0
Number of warnings: 0
Number of errors: 1

我错过了什么?

顺便提一下,我从Windows SDK的CMD shell中得到了同样的错误。

谢谢,

4个回答

27

有几个问题。

首先,您正在使用自签名证书,因此应通过在makecert命令中添加-r键来显式定义它,否则在签名步骤中会出现“签名者证书无效”的错误。

接下来,在这一步中

signtool.exe sign /f "App-O.pfx" /p fess "C:\Output\setup.exe"

您正在尝试使用密码“fess”打开pfx文件。但是实际上,您并没有为pfx文件设置任何密码。要这样做,您应该在创建pfx命令中添加-po键。

之后,您可以签署您的应用程序。

因此,正确的流程应该是:

makecert.exe -sv App-O.pvk -n "CN=MY DIGITAL KEY" App-O.cer -r

pvk2pfx.exe -pvk App-O.pvk -spc App-O.cer -pfx App-O.pfx -po fess

signtool.exe sign /f "App-O.pfx" /p fess "C:\Output\setup.exe"

以下是一些有用的链接:


1
当我运行pvk2pfx.exe -pvk App-O.pvk -spc App-O.cer -pfx App-O.pfx时,出现了密码对话框,我认为应该添加-po fess参数,但是提示说应该添加-po key参数。我可能理解有误。 - Maxim Shoustin
没错,伙计,谢谢你是对的:)我会在18个小时后加上100个。 - Maxim Shoustin
如果您不想暴露密码,请安装私钥并使用signtool /a选项,该选项会选择与您指定的CN等匹配的存储中的“最佳”密钥。 - Nick Westgate
1
添加“/p mypassword”解决了我的Rhino插件签名问题。谢谢! - Tahirhan

15

当我在一些机器上使用DigiCert代码签名证书时,意外遇到了类似的错误。后来发现,在导出证书时我选择了SHA256加密而不是TripleDES-SHA1,而我们的某个构建机仍在运行Windows Server 2012 R2。显然,这个操作系统无法解密证书,因此也会导致相同(在这种情况下非常烦人的)错误消息。

更新:在使用Hosted VS2017流水线和DigiCert证书的Azure DevOps经典流水线中也存在同样的行为。

新的YAML流水线可以使用SHA256。


1
似乎没有命令可以让pvk2pfx选择导出加密类型(SHA256 vs 3DES)。 - Erik Oppedijk

0

您只需要添加-pi参数(pvk文件的密码)就像这样:

pvk2pfx.exe -pvk App-O.pvk -pi fess -spc App-O.cer -pfx App-O.pfx -po fess -f

0

哇塞!

选项的顺序很重要,特别是如果你是Linux用户,一定要考虑这个问题。

signtool sign /f C:\Users\Administrator\Downloadsmycert.pfx /p uptycs  /tr http://timestamp.comodoca.com /debug /td SHA256 /fd SHA256 myapp.exe

首先,我在命令的末尾提到了/p密码,但它总是失败。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接