基本上如问题所述。
我编写了一个程序,使用安装在用户计算机上的X509Certificate2来签署电子邮件。这是通过MimeKit完成的,这使得它非常容易(如图所示)。
var signer = new CmsSigner(certificate, key);
signer.DigestAlgorithm = DigestAlgorithm.Sha1;
message.Body = MultipartSigned.Create(ctx, signer, messageContent);
我刚刚被问到是否可以使用'opaque'签名而不是分离签名来创建此签名电子邮件。我相信OpenSSL中有一个选项可以做到这一点(??)。
无论如何,我一直无法找到与MimeKit相关的'opaque'选项。
这是可能的,如果是的话,怎么样?
答案 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 );
}