C# Mimekit在验证后安装证书

C# Mimekit在验证后安装证书,c#,smime,mimekit,C#,Smime,Mimekit,我正在使用MimeKit验证SMIME多部分签名消息是否由特定实体签名。我拥有该实体的公共证书。在MultipartSigned对象上调用Verify(context)时,证书将导入到服务器证书列表中。我想要的是,如果找不到证书,则会出现此错误。否则,如果一个恶意用户签署了一个文件,它就会通过,更糟糕的是,我最终会安装他的证书 我的推理有缺陷吗 这是我正在使用的代码 var signed =(MultipartSigned)MimeEntity.Load(ParserOptions.Defaul

我正在使用
MimeKit
验证SMIME多部分签名消息是否由特定实体签名。我拥有该实体的公共证书。在
MultipartSigned
对象上调用
Verify(context)
时,证书将导入到服务器证书列表中。我想要的是,如果找不到证书,则会出现此错误。否则,如果一个恶意用户签署了一个文件,它就会通过,更糟糕的是,我最终会安装他的证书

我的推理有缺陷吗

这是我正在使用的代码

var signed =(MultipartSigned)MimeEntity.Load(ParserOptions.Default,@"C:\mysignedfile.txt");

using (var context = new WindowsSecureMimeContext(StoreLocation.LocalMachine))
{
    foreach (var signature in signed.Verify(context))// This install the certificate!
    {
        try
        {
            bool valid = signature.Verify();
        }
        catch (DigitalSignatureVerifyException)
        {
            throw;
            // There was an error verifying the signature.
        }                    
    }
}

在您的证书存储中拥有证书并不意味着它是可信的,它只是意味着它是已知的

就这些


这允许您稍后将其标记为受信任,还允许您的系统检查是否有撤销。

同意。我最后添加了额外的代码来检查证书是否可信。谢谢。我正试图在我的项目中做类似的事情。如果签名实体的公钥未安装或已安装但不受信任,我希望签名验证失败。我是否正确理解,签名邮件还包含用于验证的公钥,因此我不能仅因为证书未安装在我的Windows证书存储中而让验证失败?通常,签名邮件也包含证书,是的。