【问题标题】:X509Certificate2.Verify behaviourX509Certificate2.验证行为
【发布时间】:2013-04-10 14:37:20
【问题描述】:

我有一个经过数字签名的二进制 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?这是验证文件数字签名的正确方法吗?

【问题讨论】:

    标签: c# x509certificate digital-signature x509certificate2


    【解决方案1】:

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

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

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

    希望这会有所帮助,

    【讨论】:

      猜你喜欢
      • 2015-04-12
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      相关资源
      最近更新 更多