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

How can I specify an E-Mail address when signing a binary file?

我正在使用 signtool 将数字签名应用于各种 .exe/.dll 文件。然而,在 Windows Explorer 中查看签名文件显示没有设置电子邮件地址,很像这个截图(我绝不隶属于 "Paramount Software UK Ltd." -- 这个截图只是第一个我通过 Google):

找到的结果

但是,我还看到了其他屏幕截图,显示可以通过某种方式定义电子邮件地址(即使它是假的,如本例):

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

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

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

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

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

然后你会被要求输入以下参数(都是证书的主题):

为了避免这个提示,你可以在前面的命令中使用-subj直接指定subject,如下所示:

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),你可以使用它来签署一个 exedll,使用跟随 signtool 命令。例如,我签署 notepad++.exe(如您在问题中 link 的示例):

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

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

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

所以最后,如果您需要来自证书颁发机构的证书,您必须生成 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

希望这对您有所帮助,

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

长答案:@albciff 指出了如何生成具有与之关联的电子邮件地址的证书,但如果您从 Thawte 购买证书,您似乎就不走运了;我的同事向我们的证书提供商 (Thawte) 的技术支持人员提出了这个确切的问题,他们回答说:

When enrolling for a Code Signing certificate the email address used is not part of the validation process. Unfortunately, because the email is not part of the validation process it will not be included in the properties of the signed code.

此外,技术支持向我们推荐了 this article 在 'Thawte Knowledge Center' 中说明:

The e-mail address always appears as "not available" when viewing the properties of signed code. This is because the certificate validates the organization but requires no information about the e-mail address of the organization. Thus, we have validated the organization, but have not validated the e-mail. This in no way lessens the value or usefulness of your ID.

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