X509Certificate2.验证行为

本文关键字:验证 X509Certificate2 | 更新日期: 2023-09-27 18:08:41

我有一个数字签名的二进制app.exe。证书由商业CA颁发。在文件属性(Windows)中,数字签名信息显示此数字签名为OK。如果我以某种方式修改二进制(例如通过更改资源黑客)数字签名信息说这个数字签名是无效的

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

X509Certificate2.验证行为

我认为您误解了数字签名验证过程。验证数字签名的过程大致分为两步,第一步是验证签名的完整性(检查签名后没有人修改文档),第二步是验证证书状态(检查证书是否有效,没有过期或被撤销)。

所以如果你修改了你的签名app.exe,你就破坏了你的签名,但如果证书是有效的,它仍然是有效的,这就是为什么在两种情况下你的证书验证是ok的。

如果不是只验证证书,而是验证签名,那么app-modified.exe中的结果将为假,因为当你修改app.exe时,你破坏了签名。

希望有帮助,