是否可以使用MimeKit创建带有不透明签名的签名电子邮件?

时间:2015-06-01 07:24:03

标签: c# smime mimekit

基本上如问题所述。

我编写了一个程序,使用安装在用户计算机上的X509Certificate2来签署电子邮件。这是通过MimeKit完成的,这使得它非常容易(如图所示)。

var signer = new CmsSigner(certificate, key);
signer.DigestAlgorithm = DigestAlgorithm.Sha1;

message.Body = MultipartSigned.Create(ctx, signer, messageContent);

我刚刚被问到是否可以使用'opaque'签名而不是分离签名来创建此签名电子邮件。我相信OpenSSL中有一个选项可以做到这一点(??)。

无论如何,我一直无法找到与MimeKit相关的'opaque'选项。

这是可能的,如果是的话,怎么样?

2 个答案:

答案 0 :(得分:1)

是的,这也是可能的。关于S / MIME,当人们引用不透明签名时,他们的意思是他们想要app / pkcs7-mime格式的签名。以下是您将如何创建它:

var signer = new CmsSigner(certificate, key);
signer.DigestAlgorithm = DigestAlgorithm.Sha1;

message.Body = ApplicationPkcs7Mime.Sign(ctx, signer, messageContent);

希望有所帮助!

注意:

  

2013年底,微软宣布他们将退休   到2016年在其产品中使用SHA-1,并假设其为   天数作为一个完整的摘要算法编号。据推测   SHA-1摘要算法容易受到冲突的影响,并且   因此到2018年不再被认为是安全的。

     

微软和其他厂商计划转向SHA-2摘要套件   算法包括以下4种变体:SHA-224,SHA-256,   SHA-384和SHA-512。

答案 1 :(得分:0)

public void SignEmail( MimeMessage m, Org.BouncyCastle.X509.X509Certificate certificate, Org.BouncyCastle.Crypto.AsymmetricKeyParameter key, MailboxAddress sender, MimeEntity content)
    {
        var signer = new MimeKit.Cryptography.CmsSigner( certificate, key );
        signer.DigestAlgorithm = DigestAlgorithm.Sha1;

        m.Body = ApplicationPkcs7Mime.Sign( sender, signer.DigestAlgorithm, content );
    }