【发布时间】:2016-10-10 07:13:00
【问题描述】:
我有一个使用 signtool.exe 签名的 exe 文件。如果我使用 Windows 查看签名(右键单击 -> 属性 -> 数字签名 -> 详细信息 -> 查看证书 -> 路径),链看起来像这样,正如预期的那样:
Verisign
|
---Symantec Class 3 SHA256 Code Signing CA
|
---Me
但是,如果我使用 .NET API X509Certificate.CreateFromSignedFile(path) 加载证书并使用 X509Certificate2UI.DisplayCertificate(cert) 查看证书,我只会看到叶证书。当然,由于缺少链,尝试使用X509Chain 构建链会导致失败。
这是预期的行为吗,有没有办法使用托管 .NET 代码构建整个链(读取,不使用 WinVerifyTrust p/invoke)?
【问题讨论】:
-
我觉得你需要看看this的回答
-
感谢您指点我。正如怀疑的那样,似乎只使用 X509Certificate2 对象会给我叶节点。但是,关于该问题的示例仅讨论使用证书文件(即 pfx)导入整个链,而我需要从签名的可执行文件中导入。这可能吗?
-
好的,我明白了。根据this,您应该能够从您从签名的可执行文件中获得的
X509Certificate创建一个X509Certicate2。有了这个,您就可以构建一个可以验证的证书链。大致:var cert = X509Certificate.CreateFromSignedFile("path\to\signed_file"); var cert2 = new X509Certificate2(cert);然后var chain = new X509Chain(); var isValid = chain.Build(cert2); -
抱歉,之前评论中的链接错误。应该是this
标签: c# .net x509certificate2