从 Intranet Web App 发送加密邮件到 Lotus Notes
Send encrypted Mail to LotusNotes from Intranet WebApp
有人可以告诉我如何将加密邮件从我的 C# .NET 应用程序发送到 Lotus Notes 收件箱(在公司内部网中)吗?
我向我们的支持人员申请了证书和 Notes 用户。
但现在我卡住了。我通读了这个 guide,并实现了代码,但我知道我收件箱中的邮件没有任何内容,只有一个名为 smime.p7m
的文件。所以我通常不确定这是否是正确的方法。
你能给我一个教程提示或告诉我我需要做的步骤吗?
或者链接的指南大体上是正确的,我犯了什么错误?在这种情况下,请发表评论,我会添加我的代码。
非常感谢您!
更新 1 (26.08.16):
这是我目前的状态:
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.services.companyname");
smtp.Credentials = new System.Net.NetworkCredential("NOTESUSER","password");
smtp.Send(message);
在 Notes 本身中,我勾选了“发送加密的邮件”复选框。其背后的想法如下:
我假设 Notes 用户以这种方式将凭据传递给 Smtp 服务器并使用用户设置。
电子邮件已送达,但未加密。
也许你可以尝试进一步分解。从像 Thunderbird 这样的基本邮件客户端向将在她的 Notes 客户端中打开它的人发送一封加密的电子邮件怎么样?
最基本的是收件人必须拥有与您用于加密的 public 密钥对称的私钥。在正常使用中,Domino 做得很好,因为它带有自己的双因素 PKI:用户没有他们的私钥就无法登录,私钥存储在他们的工作站上一个很小的(~3 ko)文件中,文件名类似于 hername.id
或 user.id
。相应的 public 密钥在 Domino Directory (names.nsf
)
中是所有人都应该看到的
虽然基于标准的 RSA 内容,但这些常用的密钥对以非常特定于 Domino 的方式进行管理和部署。
现在,用户完全可以导入第三方证书颁发机构颁发的私钥。我现在手边没有确切的程序,您可以在任何 Notes 客户端可用的 help.nsf
中找到它。
但我想知道。您在内联网中,这意味着 you do have access to the Domino Directory,因此是收件人通常的 public 密钥。您的应用程序可能需要自己的 user.id
,而且您很可能需要在各种防火墙中打 1352
洞。顺便说一句,如果它有助于减轻任何顾虑,凭借上述本机 PKI,可以很容易地对端口 1352 上的通信进行端到端加密。
另一种选择如下。 Domino 服务器也是一个 Web 服务器。有时会激活此选项,有时不会。如果是,或者如果您可以实现它,则该目录可以作为 Web 应用程序使用。放大用户的 public 键需要一些修补和一些 HTML 解析,但 应该 是可行的。
道路上的最后一个,尽管您可能不喜欢它:Domino 是一个非常好的内部网应用程序平台,无论是客户端-服务器说服还是 HTTP 信条。
好吧,这是我最后做的:
Domino.NotesSession nSession = new Domino.NotesSession();
nSession.Initialize("secretpassword"); //password for the Notes User
Domino.NotesDatabase nDatabase = nSession.GetDatabase("SERVER", "names"); //Server and location of the names.nfs file
Domino.NotesDocument nDocument = nDatabase.CreateDocument();
NotesStream nStream;
nDocument.ReplaceItemValue("Subject", tmp.Subject);
nBody = nDocument.CreateMIMEEntity();
nStream = nSession.CreateStream();
nStream.WriteText(tmp.Body);
nBody.SetContentFromText(nStream , "text/HTML;charset=UTF-8", MIME_ENCODING.ENC_IDENTITY_7BIT);
nDocument.EncryptOnSend = true;
nDocument.Send(false, user.INS_EMAIL);
这将创建一个带有最新登录的 Notes 用户的 Notes 会话。因此,您在服务器上安装 Notes 客户端,使用该用户登录,到目前为止它可以正常工作。
有人可以告诉我如何将加密邮件从我的 C# .NET 应用程序发送到 Lotus Notes 收件箱(在公司内部网中)吗?
我向我们的支持人员申请了证书和 Notes 用户。
但现在我卡住了。我通读了这个 guide,并实现了代码,但我知道我收件箱中的邮件没有任何内容,只有一个名为 smime.p7m
的文件。所以我通常不确定这是否是正确的方法。
你能给我一个教程提示或告诉我我需要做的步骤吗? 或者链接的指南大体上是正确的,我犯了什么错误?在这种情况下,请发表评论,我会添加我的代码。
非常感谢您!
更新 1 (26.08.16):
这是我目前的状态:
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.services.companyname");
smtp.Credentials = new System.Net.NetworkCredential("NOTESUSER","password");
smtp.Send(message);
在 Notes 本身中,我勾选了“发送加密的邮件”复选框。其背后的想法如下: 我假设 Notes 用户以这种方式将凭据传递给 Smtp 服务器并使用用户设置。
电子邮件已送达,但未加密。
也许你可以尝试进一步分解。从像 Thunderbird 这样的基本邮件客户端向将在她的 Notes 客户端中打开它的人发送一封加密的电子邮件怎么样?
最基本的是收件人必须拥有与您用于加密的 public 密钥对称的私钥。在正常使用中,Domino 做得很好,因为它带有自己的双因素 PKI:用户没有他们的私钥就无法登录,私钥存储在他们的工作站上一个很小的(~3 ko)文件中,文件名类似于 hername.id
或 user.id
。相应的 public 密钥在 Domino Directory (names.nsf
)
虽然基于标准的 RSA 内容,但这些常用的密钥对以非常特定于 Domino 的方式进行管理和部署。
现在,用户完全可以导入第三方证书颁发机构颁发的私钥。我现在手边没有确切的程序,您可以在任何 Notes 客户端可用的 help.nsf
中找到它。
但我想知道。您在内联网中,这意味着 you do have access to the Domino Directory,因此是收件人通常的 public 密钥。您的应用程序可能需要自己的 user.id
,而且您很可能需要在各种防火墙中打 1352
洞。顺便说一句,如果它有助于减轻任何顾虑,凭借上述本机 PKI,可以很容易地对端口 1352 上的通信进行端到端加密。
另一种选择如下。 Domino 服务器也是一个 Web 服务器。有时会激活此选项,有时不会。如果是,或者如果您可以实现它,则该目录可以作为 Web 应用程序使用。放大用户的 public 键需要一些修补和一些 HTML 解析,但 应该 是可行的。
道路上的最后一个,尽管您可能不喜欢它:Domino 是一个非常好的内部网应用程序平台,无论是客户端-服务器说服还是 HTTP 信条。
好吧,这是我最后做的:
Domino.NotesSession nSession = new Domino.NotesSession();
nSession.Initialize("secretpassword"); //password for the Notes User
Domino.NotesDatabase nDatabase = nSession.GetDatabase("SERVER", "names"); //Server and location of the names.nfs file
Domino.NotesDocument nDocument = nDatabase.CreateDocument();
NotesStream nStream;
nDocument.ReplaceItemValue("Subject", tmp.Subject);
nBody = nDocument.CreateMIMEEntity();
nStream = nSession.CreateStream();
nStream.WriteText(tmp.Body);
nBody.SetContentFromText(nStream , "text/HTML;charset=UTF-8", MIME_ENCODING.ENC_IDENTITY_7BIT);
nDocument.EncryptOnSend = true;
nDocument.Send(false, user.INS_EMAIL);
这将创建一个带有最新登录的 Notes 用户的 Notes 会话。因此,您在服务器上安装 Notes 客户端,使用该用户登录,到目前为止它可以正常工作。