C# CAPICOM-验证SignedCode是否来自没有UI的受信任发布者

C# CAPICOM-验证SignedCode是否来自没有UI的受信任发布者,c#,digital-signature,authenticode,capicom,C#,Digital Signature,Authenticode,Capicom,我在.NET 3.0 C#应用程序中使用CAPICOM检查exe文件上的Authenticode签名。我需要确保证书列为受信任的发布者。如果证书尚未受信任,则使用signedCode.Verify(true)将显示一个对话框,以便用户可以选择是否这样做。但是,signedCode.Verify(false)正在验证签名,即使它不是来自受信任的发布者-这可能只是检查证书是否有效 如何在没有UI的情况下检查文件上的签名是否来自有效且受信任的证书?您可能需要做的是使用带有p/Invoke的mscore

我在.NET 3.0 C#应用程序中使用CAPICOM检查exe文件上的Authenticode签名。我需要确保证书列为受信任的发布者。如果证书尚未受信任,则使用
signedCode.Verify(true)
将显示一个对话框,以便用户可以选择是否这样做。但是,
signedCode.Verify(false)
正在验证签名,即使它不是来自受信任的发布者-这可能只是检查证书是否有效


如何在没有UI的情况下检查文件上的签名是否来自有效且受信任的证书?

您可能需要做的是使用带有p/Invoke的mscoree.dll函数exposed:

[DllImport("mscoree.dll", CharSet=CharSet.Unicode)]
static extern bool StrongNameSignatureVerificationEx(string wszFilePath, bool fForceVerification, ref bool  pfWasVerified);

首先,strongNameSignatureReferenceEx用于程序集签名验证,而不是身份验证码签名验证。因此,这与原始海报问题的背景无关

关于初始问题,您可以使用以下代码手动检查签名者证书是否正确链接到受信任的根目录,而无需任何GUI:

ICertificateStatus certStatus = signedCode.Signer.Certificate.IsValid();
其想法是检索签名者的证书,并告诉CAPICom检查其是否具有正确的信任链

我希望这会有所帮助。 干杯


如图所示,您可以使用WinVerifyTrust。它在Windows XP/Vista/2008/7上运行良好。如果还要检查吊销列表集

RevocationChecks = WinTrustDataRevocationChecks.WholeChain;