X509Certificate2.Verify行为

4
我有一个数字签名的二进制文件 app.exe,证书由商业CA颁发。在文件属性(Windows上),数字签名信息显示“此数字签名有效”。如果我以某种方式修改二进制文件(例如通过 Resource Hacker 更改资源),数字签名信息会显示“此数字签名无效”。 我尝试通过编程验证证书,但 X509Certificate2.Verify() 返回 true,无论我使用哪个文件-原始文件(app.exe)还是篡改后的文件(app-modified.exe)。
string filename = "app.exe"; // "app-modified.exe"
X509Certificate cert1 = X509Certificate.CreateFromSignedFile(filename);
X509Certificate2 cert2 = new X509Certificate2(cert1);
bool isValid = cert2.Verify();

这个函数为什么在两种情况下都返回true?这是验证文件数字签名的适当方式吗?
1个回答

1

我认为您对数字签名验证过程存在误解。粗略而言,数字签名验证过程包含两个步骤:第一步是验证签名完整性(检查是否在签名后修改了文档),第二步是验证证书状态(检查证书是否有效,未过期或已吊销)。

因此,如果您修改了已签名的 app.exe,您就破坏了签名,但如果证书有效,则证书仍然有效,这就是在这两种情况下证书验证都是正确的原因。

如果您只验证证书而不验证签名,则在 app-modified.exe 中结果将为 false,因为当您修改 app.exe 时会破坏签名。

希望这能帮助您。


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