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

时间:2008-11-18 22:13:49

标签: java email encryption

我有一个在UNIX(Solaris)服务器上运行的进程,该服务器每晚运行,并且需要能够发送加密的电子邮件。

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

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

所以我想我需要一种方法来连接到我的UNIX服务器上GAL所在的Exchange Server。 然后我需要检索接收者PUBLIC KEY。 然后我可以使用收件人PUBLIC KEY加密电子邮件。 这会加密电子邮件,只允许有接收者PRIVATE KEY的人正确阅读电子邮件吗? 然后我会发出电子邮件。 但是,我不确定的是,如何仅使用接收者PUBLIC KEY(在UNIX端没有KEYS)加密电子邮件,以便MS Outlook能够在收件人收到电子邮件时读取电子邮件吗?

这会有用吗? 那里的任何人都遇到了类似的问题并提出了解决方案? Java代码是首选,但任何语言都可以从。

开始

为了得到合理的答案,还需要其他任何细节吗?

由于

4 个答案:

答案 0 :(得分:6)

你的逻辑是正确的。

典型的PKI加密是:

cryptoAlgorithm(plaintext, public key) = ciphertext

cryptoAlgorithm(ciphertext, private key) = plaintext

对于某些算法,cryptoAlgorithm与发送和接收过程相同。

所以...对于每个收件人,您需要他们的数字证书,其中包含他们的公钥。

GAL证书存储空间

我认为可以配置GAL以允许用户发布证书。我的总体印象是GAL的配置和使用方式因公司而异。

S / MIME& PGP

我同意S / MIME是你想要的Outlook的帖子。

另请注意 - 如果您的用户使用的是Outlook Web,而不是Outlook客户端,则他们将无法接收加密的电子邮件。至少到2000年,但我怀疑2003年。这是一个巨大的可用性问题,我没有好的解决方法。

一般微观性

微软有自己独特的做事方式(不开玩笑......)。他们是 PKI世界没有什么不同。必须使用加密功能清楚地标记用户证书。我知道它必须有KeyUsage字段KeyEncipherment。并且可能还需要Microsoft的另一个扩展。格式不正确的用户证书可能意味着收件人在收到邮件时将无法读取邮件,因为Outlook不会就邮件加密的事实达成一致。在这里省略一些严重的集成测试时间,并打算在如何执行此操作的过程中触及大量用户组。每当我的团队不得不与Microsoft产品集成时,就会出现令人讨厌的意外情况,尤其是关于证书的配置方式。

图书馆&工具

我第二次推荐BouncyCastle - 我没有使用它,但我信任的人发誓它。当我不得不写这些东西时,我个人喜欢Phaos工具包,但我已经过时了。我知道这需要花费很多钱,而且可能会让你失望。

OpenSSL是另一个神话般的工具,它比SSL更有用。它非常适合生成测试证书,但我不记得它是否也进行了S / MIME电子邮件加密。

对于大多数库,您应该能够获取纯文本和证书,并将它们放入生成S / MIME消息的函数中。他们也可能需要加密算法。

答案 1 :(得分:4)

在一般情况下:要向某人发送加密邮件,您只需要他们的公钥。你自己不需要钥匙。使用不对称加密的规则是使用公钥加密的任何内容都可以使用相应的私钥进行解密,而使用私钥加密的任何内容都可以使用相应的公钥进行解密。

只有在您要对邮件进行签名时,才需要服务器密钥。

如果你想用Java实现,我不认为JavaMail支持开箱即用的加密,但是你可以查看JavaMail-Crypto(我自己没有使用它)。据说GnuPG的某个JNI接口......你可以随时用任何语言执行PGP或GnuPG ......

我不知道Outlook中对PGP的支持,也不了解Outlook的其他任何内容。

答案 2 :(得分:2)

您必须以s / mime格式向Outlook发送加密邮件。 Outlook不支持PGP。

首先尝试从Java发送明文消息,然后查看是否可以将其插入Outlook。以后担心加密问题。使用JavaMail库创建和发送电子邮件。

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

要以s / mime格式创建加密邮件,我建议Bouncy Castle。 Bouncy Castle是一个加密提供者,也支持s / mime。 (寻找CMS / Smime包)。下载的源中应该有一些示例。我过去曾用它来发送电子邮件到各种各样的电子邮件客户端,包括Outlook,它运行得很好。但要为密码填充自己 - 这可能是一个陡峭的学习曲线!

答案 3 :(得分:1)

之前未提及的警告是,GAL不一定在Exchange Server上,并且在不以独立模式运行时更频繁地在域服务器上找到。证书将在LDAP属性userCertificate或userSMIMECertificate。

中找到