2013-04-10 80 views
3

我有一个数字签名的二进制APP.EXE。证书由商业CA颁发。在文件属性(在Windows上),数字签名信息说这个数字签名是好的。如果我以某种方式修改二进制文件(例如,通过在资源黑客改变资源)的数字签名信息说,该数字签名是无效X509Certificate2.Verify行为

我试图以编程方式验证证书,但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

我想你是误会了数字签名验证的过程。粗略验证数字签名过程包含两个步骤,第一步验证签名完整性(检查在签名应用后没有人修改文档),第二步验证证书状态(检查证书是否有效,未过期或撤销)。

所以如果修改签署APP.EXE你打破了你的签名,但如果证书是有效的它是在这两种情况下,你的证书验证是确定的原因仍然有效。

如果不是验证只有证书您验证签名,因为当你修改APP.EXE你打破了签名,结果将是在App-modified.exe假。

希望这有助于

相关问题