.NET有哪些S/MIME库?

10
我需要使用C#创建S/MIME消息(如RFC 2633“S/MIME Version 3 message specification”和RFC 3335中所述)。 我能找到的唯一S/MIME库是商业库(http://www.example-code.com/csharp/smime.asp),对我们来说没有用。
是否有现有的库可实现创建S/MIME消息,特别是.p7s文件?
我已经拥有所有加密和签名元素需要放入此文件中,但我想创建.p7s文件,而不必手动编写自己的库并使用RFC文档进行辅助...

编辑: 我找到了另一个 商业S/MIME库,但仍无法满足我们的要求。 看起来我需要自己编写一个S/MIME库,这很遗憾。 所有需要S/MIME的.net用户都在使用商业、闭源的库吗?

6个回答

15

我已经编写了一个支持S/MIME的MIME库,叫做MimeKit,它比任何基于System.Net.Mail的东西都更加稳健,因为后者非常糟糕。

它支持原始8位头、rfc822组地址、从地址头(To/Ccc/Bcc等)的rfc822注释中提取名称、解析mbox格式的消息池(包括支持基于Content-Length的SunOS格式),并且它是比其他任何C# MIME解析器快一个数量级,因为它是基于字节流而不是TextReader(这也是它比其他任何C#解析器更好地支持原始8位头的原因)。


1
我刚开始使用你们的库,感觉非常棒,谢谢!不过我注意到,在Android或iOS上似乎不存在MimeKit.Cryptography命名空间(还没有?)。是否有计划在Android和iOS上支持S/MIME呢?我之所以问这个问题是因为我寻找S/MIME库的主要目的是为了在移动平台上编写应用程序。谢谢! - user708641
是的,我只是还没有抽出时间来做。我会尽快处理的。 - jstedfast
刚刚提交了一个补丁到MimeKit,以便在iOS和Android上构建所有的S/MIME和PGP支持 :-) - jstedfast
非常棒的库,文档也写得非常好 - 谢谢! - Mark Whitaker

3

请查看Rebex Secure Mail。这是我多年来使用的非常稳定的库。它是100%托管代码,源代码也可用。


3
我花了很多时间寻找一个好的.NET S/MIME库,但都没有找到。最终我创建了自己的库,名为OpaqueMail。

这是一款开源且完全免费的库。它继承自System.Net.Mail.SmtpClient类,因此移植现有代码非常简单。它还包括用于与POP3和IMAP通信的类。

请访问http://opaquemail.org/了解更多信息。

以下是发送S/MIME三层封装消息(数字签名、加密、再次数字签名)的示例:

// Instantiate a new SMTP connection to Gmail using TLS/SSL protection.
SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 587);
smtpClient.Credentials = new NetworkCredential("username@gmail.com", "Pass@word1");
smtpClient.EnableSsl = true;

// Create a new MailMessage class with lorem ipsum.
MailMessage message = new MailMessage("username@gmail.com", "user@example.com", "Example subject", "Lorem ipsum body.");

// Specify that the message should be signed, have its envelope encrypted, and then be signed again (triple-wrapped).
message.SmimeSigned = true;
message.SmimeEncryptedEnvelope = true;
message.SmimeTripleWrapped = true;

// Specify that the message should be timestamped.
message.SmimeSigningOptionFlags = SmimeSigningOptionFlags.SignTime;

// Load the signing certificate from the Local Machine store.            
message.SmimeSigningCertificate = CertHelper.GetCertificateBySubjectName(StoreLocation.LocalMachine, "username@gmail.com");

// Send the message.
await smtpClient.SendAsync(message);

希望这可以帮到你。

2

0

要实现完整的 S/MIME 非常困难,需要大量额外的工作。您可以使用SecureBlackbox 中的 SMIME 组件来完成您的任务。

更新:SecureBlackbox 是我们的产品。它完全支持 Silverlight 和 Windows Phone(包括 Mango)。


0

即使成本不是问题(我肯定它会是一个问题),另一个问题是chilkatsoft如何提供库文件。我敢打赌他只是提供一些dll文件,你可以很愉快地在Visual Studio中使用吧?我的老板太抠门了,不肯花钱买VS.Net,我们使用http://www.microsoft.com/express/vwd/。 - Gabriel
就像我说的那样,我们使用的是具有相当有限 DLL 能力的 Visual Web Dev。具体来说,无法编译成 DLL,并且我认为它在一般情况下与外部 DLL 的互操作性非常有限,尽管我可能错了。哦,我多么渴望 Visual Studio! - Gabriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接