如何在签署二进制文件时指定电子邮件地址?

时间:2015-02-17 14:30:59

标签: windows email digital-signature signtool

我正在使用signtool将数字签名应用于各种.exe / .dll个文件。但是,在Windows资源管理器中查看已签名的文件显示没有设置电子邮件地址,就像在此屏幕截图中一样(我绝不隶属于“Paramount Software UK Ltd.” - 这个屏幕截图只是我的第一个结果通过谷歌发现):

Screenshot of Windows explorer showing signature details without e-mail address

但是,我还看到其他屏幕截图显示,以某种方式可以定义一个电子邮件地址(即使它是一个虚假的地址,就像在这种情况下):

Screenshot of Windows explorer showing signature details including e-mail address

是否可以通过signtool设置此电子邮件地址,或者它实际上是证书本身的属性(即购买证书时需要指定)?

2 个答案:

答案 0 :(得分:7)

从证书的emailAddress字段中的subject distinguished name中提取的电子邮件属性。

您可以使用openssl进行测试以生成自签名证书(然后您可以使用CSR生成emailAddress并发送给证书颁发机构以生成有效的最终实体证书。要测试它,您可以执行以下步骤:

使用以下openssl命令生成自签名证书

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365

然后,系统会要求您输入以下参数(所有证书主题均为:)

enter image description here

要避免此提示,您可以使用subject直接在上一个命令中指定-subj,如下所示:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -subj "/C=ES/ST=58/L=Barcelona/O=yourOrgName/OU=yourDept/CN=yourAppName/emailAddress=myEmail@test.com"

现在,您可以使用以下命令从生成的密钥和证书生成p12(或pfx):

openssl pkcs12 -export -out myTestWithMail.pfx -inkey key.pem -in cert.pem

现在您有一个p12(myTestWithMail.pfx),您可以使用跟随exe命令对dllsigntool进行签名。例如,我签署notepad++.exe(如您在问题中链接的示例中所示):

signtool.exe sign /f C:\Users\Albert\myTestWithMail.pfx /p 1234 "C:\Program Files (x86)\Notepad++\notepad++.exe"

请注意,/f用于签名密钥的路径,/p是密钥的密码。

现在,您可以在您签名的文件中看到该电子邮件:

enter image description here

最后,如果您需要证书颁发机构颁发的证书,则必须使用CSR命令生成emailAddress指定openssl

openssl req -new -newkey rsa:2048 -nodes -out yourAppName.csr -keyout yourAppName.key -subj "/C=ES/ST=58/L=Barcelona/O=yourOrgName/OU=yourDept/CN=yourAppName/emailAddress=myEmail@test.com"

或者不指定-subj参数,并在提示时输入主题专有名称的正确值:

openssl req -new -newkey rsa:2048 -nodes -out yourAppName.csr -keyout yourAppName.key

希望这有帮助,

答案 1 :(得分:3)

简短回答:,电子邮件地址是证书的一部分而,在签署二进制文件时无法指定。

答案很长:@albciff指出如何生成一个与其关联的电子邮件地址的证书,但如果您从Thawte购买证书,则表示您运气不佳;我的同事向我们的证书提供者(Thawte)的技术支持询问了这个确切的问题,他们回复说:

  

注册代码签名证书时,使用的电子邮件地址不是验证过程的一部分。不幸的是,由于电子邮件不是验证过程的一部分,因此它不会包含在签名代码的属性中。

此外,技术支持也提到了我们 {39}在Thawte知识中心'}这解释了:

  

电子邮件地址始终显示为"不可用"查看签名代码的属性时。这是因为证书可以验证组织,但不需要有关组织电子邮件地址的信息。因此,我们已经验证了该组织,但尚未验证该电子邮件。这绝不会降低您的身份证的价值或用途。

因此,不仅电子邮件地址是证书的一部分,您是否可以将电子邮件地址与证书相关联,还取决于谁颁发了证书。