1

基本上如问题所述。

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

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

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

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

无论如何,我一直找不到任何提及与 MimeKit 相关的“不透明”选项。

这可能吗?如果可以,怎么做?

4

2 回答 2

1

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

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

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

希望有帮助!

笔记:

2013 年底,微软宣布他们将在 2016 年之前在他们的产品中停止使用 SHA-1,假设它作为一个完整的摘要算法的日子已经过去了。据推测,到 2018 年,SHA-1 摘要算法将容易受到冲突的影响,因此不再被认为是安全的。

Microsoft 和其他供应商计划迁移到 SHA-2 的摘要算法套件,其中包括以下 4 个变体:SHA-224、SHA-256、SHA-384 和 SHA-512。

于 2015-06-02T10:16:39.757 回答
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 );
    }
于 2015-09-20T10:58:44.973 回答