邮件签名和加密

时间:2016-02-29 15:07:37

标签: email encryption apache-camel

我想签名并加密我的邮件。

我目前的骆驼版本是2.13.0。

我可以使用骆驼功能吗?

正文是纯文本,因此不能使用XMLDSig左右。

预期结果应该是带有这些标题的邮件:

  • Content-Type:application / pkcs7-mime;名称=" smime.p7m&#34 ;; SMIME型=包膜数据
  • Content-Transfer-Encoding:base64

2 个答案:

答案 0 :(得分:1)

我解决了发送问题。

我创建了一个新的MimeMessage,其中包含所有必需参数,例如来自收件人主题和内容(Multipart with body and attachments)。< / p>

使用BouncyCastle我signedencrypted这个MimeMessage。

我将生成的MimeMessage设置为body并使用标准的camel邮件端点发送它。所有必需参数都将从MimeMessage本身中选择,而不是从交换头中选择。

对于接收我将使用camel邮件标准,但使用参数 mapMailMessage = false ,我可以处理收到的 javax.mail.Message 本身,而无需预处理。对于解密,我也会使用BouncyCastle。

答案 1 :(得分:0)

我不是骆驼用户,但我很好奇并玩弄它。你想要的是S / MIME签名和加密。这个目前不可用,但它有一个ticket,自2015年2月创建以来从未得到任何响应.Camel具有MIME-Multipart数据格式,PGP加密(但仅对称),签名/验证(没有加密) - 但我认为没有办法将它们组合起来,以便为签名+加密的电子邮件真正获得有效的S / MIME信封。此外,PGP不是S / MIME,反之亦然。

我知道如何通过JavaMail + BouncyCastle库撰写和发送此类电子邮件,我甚至还有示例代码。从理论上讲,您可以通过JavaMail + BouncyCastle创建MIME消息,然后使用Camel发送它或创建您自己的S / MIME端点或数据格式(至少单向用于编组并在不需要时跳过解组)。但开箱即用,我还没有办法做到这一点。

<强>更新

即使我预先配置了签名&amp;输入端点上加密的MIME部分并执行此操作...

.setHeader("From", simple("sender@web.de"))
.setHeader("To", simple("recipient@web.de"))
.setHeader("Subject", simple("Signed & encrypted"))
.setHeader("Content-Type", simple("application/pkcs7-mime; name=\"smime.p7m\"; smime-type=enveloped-data"))
.setHeader("Content-Transfer-Encoding", simple("base64"))

...并且发送邮件,像Thunderbird这样的邮件客户端无法真正解除邮件,因为Camel邮件端点会将Content-Transfer-Encoding覆盖7bit的值。此问题有another ticket,但自2014年6月以来也未解决。因此,目前在使用JavaMail和BouncyCastle构建消息后,您甚至无法使用邮件端点发送消息。你甚至必须自己发送它(也很简单,通过JM + BC,但很烦人)。所以目前你不能真正使用Camel基础设施,因为端点和数据格式不适合S / MIME消息组合。