4

我有一个数字签名的二进制 app.exe。证书由商业 CA 颁发。在文件属性(在 Windows 上)中,数字签名信息显示This digital signature is OK。如果我以某种方式修改二进制文件(例如通过更改 Resource Hacker 中的资源),数字签名信息表明This digital signature is not valid

我尝试以编程方式验证证书,但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?这是验证文件数字签名的正确方法吗?

4

1 回答 1

1

我认为您误解了数字签名验证过程。粗略验证数字签名过程包括两个步骤,第一步是验证签名完整性(检查签名后没有人修改文档),第二步是验证证书状态(检查证书是否有效、未过期或撤销)。

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

如果您验证签名而不是仅验证证书,则 app-modified.exe 中的结果将是错误的,因为当您修改 app.exe 时,您破坏了签名。

希望这可以帮助,

于 2014-03-28T10:50:05.273 回答