如何通过编程方式发送加密电子邮件(来自自动化流程)

13

我在一台运行夜间任务的UNIX(Solaris)服务器上,需要能够发送加密邮件。

我只需要PKI中的“加密”部分,不需要数字签名/自我否认部分。

我在公司环境中使用MS Outlook,并假设当用户在“工具”->“选项”->“安全”下单击“发布到GAL...”时,这会将他们的公钥发布到全局地址列表(GAL)。

所以我想我需要一种连接到托管GAL的Exchange Server的方法来自我的UNIX服务器。 然后我需要检索收件人的公钥。 然后我可以使用收件人的公钥加密电子邮件。 这将加密电子邮件,并仅允许拥有收件人私钥的人读取电子邮件,对吗? 然后我会发送电子邮件。 但是,我不确定如何仅使用收件人的公钥(在UNIX端没有密钥)加密电子邮件,以使MS Outlook在接收者收到邮件时能够读取邮件?

这样可以吗? 是否有人遇到类似问题并找到解决方案? 首选Java代码,但任何语言都可以起步。

是否需要其他详细信息才能获得合理答案?

谢谢

4个回答

7

你的逻辑是正确的。

典型的PKI加密方式是:

cryptoAlgorithm(plaintext, public key) = ciphertext

cryptoAlgorithm(ciphertext, private key) = plaintext

对于某些算法,加密算法是相同的过程,发送和接收。
因此,对于每个接收者,您需要他们的数字证书,其中包含他们的公钥。
GAL证书存储
我认为可以配置GAL以允许用户发布证书。我的一般印象是,GAL的配置和使用因公司而异。
S/MIME和PGP
我同意帖子中提到的S/MIME是Outlook所需的。
还要注意-如果您的用户使用Outlook Web而不是Outlook客户端,他们将无法接收加密电子邮件。至少截至2000年,但我猜2003年也是如此。这是一个巨大的可用性问题,我没有好的解决方法。
Microsoftyness
Microsoft有他们自己特殊的做事方式(毫不奇怪...)。在PKI世界中也是如此。用户证书必须明确标记具有加密功能。我知道它必须具有KeyUsage字段KeyEncipherment。 Microsoft可能需要另一个扩展。拥有格式不正确的用户证书可能意味着收件人无法在邮件到达时阅读邮件,因为Outlook不会同意邮件被加密。在这里节省一些严肃的集成测试时间并计划击中许多用户组。我们的团队每次必须与Microsoft产品集成时都会遇到令人讨厌的惊喜,特别是关于如何配置证书。
库和工具
我同意BouncyCastle的建议-我没有使用过它,但是我信任的人发誓。当我必须编写这个东西时,我个人非常喜欢Phaos工具包,但我已经过时了。我知道它花费了大量资金,可能对您的预算来说太贵了。
OpenSSL是另一个神奇的工具,适用于比SSL更多的内容。它非常适合生成测试证书,但我不记得它是否也可以进行S/MIME电子邮件加密。
对于大多数库,您应该能够将明文和证书放入生成S/MIME消息的函数中。它们可能还需要加密算法。

3
通常情况下:要向某人发送加密消息,您只需要他们的公钥。您不需要自己拥有密钥。非对称加密的规则是:使用公钥加密的任何内容都可以使用相应的私钥解密,使用私钥加密的任何内容都可以使用相应的公钥解密。
如果您想签署该消息,则仅需为您的服务器获取密钥。
如果您想在Java中实现此功能,我认为JavaMail不支持内置加密,但您可以查看JavaMail-Crypto(我自己没有使用过)。据说有一个JNI接口连接到GnuPG的某个地方……而且您始终可以从任何语言执行PGP或GnuPG……
我不知道Outlook对PGP的支持情况,也不了解Outlook的其他信息。

1

您需要以s/mime格式发送加密邮件到Outlook。Outlook不支持PGP。

首先尝试从Java发送纯文本消息,看看是否可以将其发送到Outlook。稍后再考虑加密。使用JavaMail库创建和发送电子邮件。

我不知道如何从GAL中提取密钥。最简单的方法可能是手动导出密钥,然后看看是否可以使用它。

要创建s/mime格式的加密邮件,我建议使用Bouncy Castle。Bouncy Castle是一个加密提供程序,也支持s/mime。(查找CMS/Smime包)。下载的源代码中应该有一些示例。我过去曾使用它向各种电子邮件客户端发送电子邮件,包括Outlook,效果非常好。但是准备好迎接加密内容 - 它可能是一个陡峭的学习曲线!


感谢回复。我在加密方面肯定还有很多要学习的地方。至少现在我有一个开始工作的地方了。 - Paul

0

之前未注意到的警告是GAL不一定在Exchange服务器上,而更常见地在域服务器上找到,除非以独立模式运行。证书将在LDAP属性userCertificate或userSMIMECertificate中找到。


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