ord*_*dag 12 .net c# cryptography code-signing authenticode
在我的C#
/ .NET
应用程序中,我必须检查给定的可执行文件是否经过数字签名 (最好不Exception
进行测试).
然后我需要检查其证书是否有效 (基于已安装的根证书)以及文件内容是否对签名有效.
这里有很多课程BCL
,我不知道从哪里开始和使用什么,到目前为止我发现的任何东西并没有消除我的困惑......
如果没有 P/Invoke
可能,我想做这样的事情:
bool IsSignedFile(string path);
Cert GetCertificateFromSignedFile(string path);
bool IsValidCertificate(Cert cert)
Sig GetSignatureFromSignedFile(string path);
bool IsValidSignature(string path, Sig sig, Cert cert);
Run Code Online (Sandbox Code Playgroud)
补充说明:
我目前遇到的一个大问题是,我找不到一种方法来轻松获取此类文件的签名.仍然希望有一个提供的,可管理的BCL
解决方案,因为如果缺少这一部分,我会感到惊讶.(对于证书,这可以通过公正的方式完成,也可以进行X509Certificate.CreateFromSignedFile
验证)
我不希望将50%的工作与P/Invoke
代码或大型不同的库混合使用.
我找到了一个AuthenticodeSignatureInformation
类,但没有关于为给定的可执行文件使用它的信息.
您只能使用托管代码执行此操作.mono项目有自己的signcode和chktrust工具,允许您签名和验证Authenticode(tm)签名.
两者都使用Mono.Security.dll程序集,它在Windows下运行正常,并且所有代码都是根据MIT.X11许可证授权的(因此您几乎可以随意使用它).
但是,你需要一些额外的逻辑来检查根证书,因为Mono使用它自己的商店 - 而不是Windows上的商店.这应该不是一个大问题,因为.NET(因为v2)提供了查询/访问用户/机器证书存储的类.
免责声明: 我写了上面的大部分代码;-)