我正在使用signtool将数字签名应用于各种.exe
/ .dll
个文件。但是,在Windows资源管理器中查看已签名的文件显示没有设置电子邮件地址,就像在此屏幕截图中一样(我绝不隶属于“Paramount Software UK Ltd.” - 这个屏幕截图只是我的第一个结果通过谷歌发现):
但是,我还看到其他屏幕截图显示,以某种方式可以定义一个电子邮件地址(即使它是一个虚假的地址,就像在这种情况下):
是否可以通过signtool
设置此电子邮件地址,或者它实际上是证书本身的属性(即购买证书时需要指定)?
答案 0 :(得分:7)
从证书的emailAddress
字段中的subject distinguished name
中提取的电子邮件属性。
您可以使用openssl进行测试以生成自签名证书(然后您可以使用CSR
生成emailAddress
并发送给证书颁发机构以生成有效的最终实体证书。要测试它,您可以执行以下步骤:
使用以下openssl
命令生成自签名证书
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
然后,系统会要求您输入以下参数(所有证书主题均为:)
要避免此提示,您可以使用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
命令对dll
或signtool
进行签名。例如,我签署notepad++.exe
(如您在问题中链接的示例中所示):
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
希望这有帮助,
答案 1 :(得分:3)
简短回答:是,电子邮件地址是证书的一部分而否,在签署二进制文件时无法指定。
答案很长:@albciff指出如何生成一个与其关联的电子邮件地址的证书,但如果您从Thawte购买证书,则表示您运气不佳;我的同事向我们的证书提供者(Thawte)的技术支持询问了这个确切的问题,他们回复说:
注册代码签名证书时,使用的电子邮件地址不是验证过程的一部分。不幸的是,由于电子邮件不是验证过程的一部分,因此它不会包含在签名代码的属性中。
此外,技术支持也提到了我们 {39}在Thawte知识中心'}这解释了:
电子邮件地址始终显示为"不可用"查看签名代码的属性时。这是因为证书可以验证组织,但不需要有关组织电子邮件地址的信息。因此,我们已经验证了该组织,但尚未验证该电子邮件。这绝不会降低您的身份证的价值或用途。
因此,不仅电子邮件地址是证书的一部分,您是否可以将电子邮件地址与证书相关联,还取决于谁颁发了证书。