使用.cer文件对.exe文件进行签名(signtool.exe要求输入哪个证书名称?)

11
我已经为我的程序购买了证书。 我购买证书的网站向我发送了一个 .cer 文件(43-some-really-long-name-9962812767788.cer)。没有其他文件被发送,但我几乎可以百分之百地确定我不需要任何其他文件。 当我单击那个 .cer 文件时,会显示以下信息: - for:(我的数据) - by:Certum Code Signing CA - expires:2014-10-24 所有这些信息似乎都没问题。 我有一个 .exe 文件,想用它来签名(例如,当用户在 Windows 上以管理员身份运行它时,他将能够看到证书信息)。 我发现可以使用 signtool.exe 进行签名,但它总是返回错误,指出未找到符合所有条件的证书。

那么,如何使用仅.cer文件(以及从该.cer文件生成的所有文件)对我的程序进行签名(在我的.exe中添加.cer)?

我没有证书、.cer和所有证书术语的经验,请在回答时考虑这一点(我是一个简单的人... ;)


到目前为止,我已经在计算机帐户的“受信任的根证书颁发机构”存储中安装了 .cer(我认为我是以正确的方式完成的),根据 MSDN博客 的说法:
  1. 开始 -> 运行 -> MMC
  2. 文件 -> 添加/删除Snap in...
  3. 从“添加或删除Snap-ins”窗口中选择“证书”,然后单击“添加>”。选择“计算机帐户”,然后单击“下一步”。
  4. 选择“本地计算机”,然后单击“完成”。
  5. 在左侧窗格中打开“受信任的根证书颁发机构”存储,并单击“证书”,如图7所示。然后右键单击右窗格并选择“全部任务 -> 导入”。
  6. 导入上面创建的 .cer 文件并安装它。

我现在确实在MMC中看到了我的cer: enter image description here

然而,我不知道如何正确使用signtool.exe。 命令:

Signtool sign /v 
/t http://timestamp.verisign.com/scripts/timstamp.dll 
/n CER_NAME_HERE FileToSign.exe

失败了,因为我不知道我的证书中的"CER_NAME_HERE"是什么。
4个回答

8
将证书保存在证书存储中是正确的方法。直接使用.pfx文件的想法只会邀请别人窃取密钥。我确信,提供这种答案的人也会将保护私钥的密码暴露在某个批处理文件中以方便使用。不管怎样,我敦促每个人都要使用证书存储,这也是它们被创建的原因。
您只需要将带有私钥的.pfx导入到Personal存储中。将私钥标记为不可导出以增加安全性。然后,您可以使用/n开关和Issued To字段的值调用signtool.exe。密码不再需要。如果您使用的是machine scope而不是user scope,则还必须包括/sm开关。
signtool.exe sign /a /n "<Issued_To>" /t "<TimeStamp_Server>" <File_Name>

1
请注意:需要输入到SignTool.exe的/n标志中(在MSFT文档中称为SubjectName)的<Issued_To>x509Certificate类的SubjectSubjectName属性不同...它实际上是证书主体名称的通用名称CN="ABC"部分。 - Reahreic

4

从你的样例中,你实际上没有指定证书文件。

首先,你需要创建一个包含证书和任何签名CA证书的pfx文件,然后使用/f选项传递该文件:

signtool.exe sign /f "blah.pfx" /t http://timestamp.comodoca.com/authenticode "filetosign.exe"

/n 选项仅用于从证书存储中选择特定证书。


当我使用 (使用正确的 /f "file.cer") 时,我遇到了错误: SignTool 错误: 找不到符合所有给定条件的证书 (如果我使用不正确的文件名比如 /f "badfile.cer",我会得到文件未找到的错误,所以这是另一回事)。 - PolGraphic
@PolGraphic 你可能需要将它转换成包含证书和任何签名CA证书的pfx(证书存储)。我不知道如何做到这一点。 - Deanna
1
确实,我需要一个pfx文件。你可以把它添加到你的答案中,这样我就可以把它标记为正确答案吗?/f提示和pfx提示一起组成了完整的解决方案。 - PolGraphic
你用什么创建了PFX文件?我上次查找时找不到命令。 - Deanna
1
@PolGraphic 重新表述并链接到另一个答案。 - Deanna
1
@Deanna 直接使用 pfx 文件是不好的做法。此外,pfx 不是证书存储区,请正确使用术语。请参阅我的答案,了解使用实际存储在证书存储区中的密钥对可执行文件进行签名的正确方法。 - MoonStom

4

我发现没有一个简明扼要的答案,所以我会补充一下。

对于Certum,在您申请证书时,有一个安装选项。使用它来安装在您的电脑上。然后,您可以进入浏览器的证书存储,选择从那里导出证书,然后选择导出私钥,将其保存为pfx格式。

希望这能帮助到某些人, ~技术小哥。


2
我遇到了同样的问题,通过使用p12文件类型而非pfx文件类型解决了这个问题。我使用Firefox证书管理器和Comodo的user.crt创建了p12文件。命令行如下:
signtool sign /f "C:\Test.p12" /p password1 /t http://timestamp.comodoca.com/authenticode /v "C:\Test.msi"

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