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

Java 如何以编程方式(通过自动化流程)发送加密电子邮件,java,email,encryption,Java,Email,Encryption,我有一个在UNIX(Solaris)服务器上运行的进程,该服务器每晚运行,需要能够发送加密电子邮件 我只需要“加密”部分,而不需要PKI的数字签名/自我否认部分 我在公司环境中使用MS Outlook,我假设当用户单击“发布到GAL…”时,在“工具”->“选项”->“安全”下,这会将其公钥发布到全局地址列表(GAL) 因此,我想我需要一种方法从UNIX服务器连接到GAL所在的Exchange服务器。 然后我需要检索最近的公钥。 然后我可以用最近的公钥加密电子邮件。 这将加密电子邮件,并且只允许拥

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

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

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

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

这样行吗? 有没有人遇到了类似的问题并提出了解决方案? Java代码是首选,但任何语言都可以从它开始

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


谢谢

在一般情况下:要向某人发送加密消息,您只需要他们的公钥。你不需要自己有钥匙。使用非对称加密的规则是,使用公钥加密的内容可以使用相应的私钥解密,使用私钥加密的内容可以使用相应的公钥解密

仅当您要对邮件签名时,才需要服务器密钥

如果你想用Java实现,我不认为JavaMail支持开箱即用的加密,但是你可以看看(我自己没有用过)。据说在某个地方有一个到GnuPG的JNI接口。。。您可以随时从任何语言执行PGP或GnuPG


我不知道Outlook中是否支持PGP,也不知道Outlook是否支持其他内容。

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

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

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


我建议使用s/mime格式创建加密邮件。Bouncy Castle是一个加密提供程序,它还支持s/mime。(寻找CMS/Smime包)。下载的资料中应该有一些例子。我过去曾使用它向各种各样的电子邮件客户端发送电子邮件,包括Outlook,它工作得非常好。但是,为加密技术做好准备——这可能是一个陡峭的学习曲线

前面没有提到的警告是,GAL不一定在Exchange服务器上,如果不是在独立模式下运行,则在域服务器上更常见。该证书将在LDAP属性userCertificate或userSMIMECertificate中找到。

您的逻辑是正确的。

典型的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年也是如此。这是一个巨大的可用性问题,我没有很好的解决办法

通用微软公司

微软有自己独特的做事方式(不是开玩笑…)。他们是 PKI的世界没有什么不同。用户证书必须清楚地标记加密功能。我知道它必须有KeyUsage字段KeyEncryption。微软可能还需要另外一个扩展。具有格式不正确的用户证书可能意味着收件人在邮件到达时无法阅读邮件,因为Outlook不会同意邮件已加密的事实。在这里留出一些认真的集成测试时间,并计划对许多用户组进行测试。每次我的团队不得不与Microsoft产品集成时,都会有令人不快的惊喜,特别是关于证书的配置

库和工具

我支持BouncyCastle的建议——我没有使用过它,但我信任的人对此发誓。当我不得不写这些东西的时候,我个人很喜欢Phaos工具包,但是我已经过时了。我知道这花了很多钱,对你来说可能太贵了

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


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

谢谢你的回复。在加密方面,我肯定有很多东西要学。至少现在我会有一个开始工作的地方。