我在.NET 3.0 C#应用程序中使用CAPICOM来检查exe文件上的Authenticode签名。我需要确保证书列为可信发布者。如果证书尚未受信任,则使用signedCode.Verify(true)
将显示对话框,因此用户可以选择是否这样做。但是,signedCode.Verify(false)
正在验证签名,即使它不是来自受信任的发布者 - 可能只是检查证书是否有效。
如何在没有UI的情况下检查文件上的签名是否来自有效且受信任的证书?
答案 0 :(得分:2)
首先, StrongNameSignatureVerificationEx 用于汇编签名验证,而不是Authenticode签名验证。所以,这与原始海报问题的背景无关。
关于最初的问题,您可以使用以下代码手动检查签署者证书是否正确链接到受信任的根,而没有任何GUI:
ICertificateStatus certStatus = signedCode.Signer.Certificate.IsValid();
这个想法是检索签名者的证书并告诉CAPICom检查它是否有正确的信任链。
我希望这会有所帮助。 欢呼声,
Mounir IDRASSI,IDRIX,http://www.idrix.fr
答案 1 :(得分:0)
您可能需要做的是使用P / Invoke通过mscoree.dll StrongNameSignatureVerificationEx
函数公开:
[DllImport("mscoree.dll", CharSet=CharSet.Unicode)]
static extern bool StrongNameSignatureVerificationEx(string wszFilePath, bool fForceVerification, ref bool pfWasVerified);
答案 2 :(得分:0)
您可以使用WinVerifyTrust显示here。它在Windows XP / Vista / 2008/7上运行良好。如果您还想检查撤销列表集
RevocationChecks = WinTrustDataRevocationChecks.WholeChain;