9

我需要使用 C# 创建 S/MIME 消息(如 RFC 2633、“S/MIME 版本 3 消息规范”和 RFC 3335 中所指定)。我能找到的唯一 S/MIME 库是一个商业库 ( http://www.example-code.com/csharp/smime.asp ),这对我们没有好处。

是否有任何现有的库来完成创建 S/MIME 消息,特别是 .p7s 文件?

我有所有需要进入此文件的加密和签名元素,但我想创建 .p7s 文件而不借助 RFC 文档手动处理我自己的库...


编辑:我找到了另一个商业 S/MIME 库,这仍然不符合我们的要求。它看起来越来越像我将不得不手动滚动一个 S/MIME 库,这很可悲。.net 中需要 S/MIME 的每个人都使用商业的封闭源代码库来实现吗?

4

6 回答 6

14

我编写了自己的 MIME 库,它支持名为MimeKit的 S/MIME ,它比基于 System.Net.Mail 的任何东西都要强大得多,后者被严重破坏了。

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

于 2013-09-24T13:35:17.710 回答
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);

希望这可以帮助。

于 2013-08-22T22:53:44.813 回答
3

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

于 2009-10-15T11:00:09.917 回答
2

CodeProject 上有一个相当不错的 S/MIME 类。

http://www.codeproject.com/KB/security/CPI_NET_SecureMail.aspx

于 2009-10-27T22:48:57.600 回答
0

我没有使用过这个 S/MIME 库,但我的应用程序使用了来自同一供应商的另一个库,并且运行良好:

http://www.chilkatsoft.com/mime-dotnet.asp

他们执行 p7s 签名的库是独立的,这可能是一个问题,具体取决于您的预算:

http://www.chilkatsoft.com/crypt-dotnet.asp

于 2008-09-24T14:37:08.807 回答
0

实现完整的 s/mime 非常困难,因为它需要大量额外的工作。您可以将SecureBlackbox 中的 SMIME 组件用于您的任务。

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

于 2008-12-20T09:48:18.557 回答