2016-02-29 18 views
6

私のメールに署名して暗号化したい。メールの署名と暗号化

私の現在のラクダのバージョンは2.13.0です。

私はこの目的のために使用できるラクダの機能はありますか?

本文はプレーンテキストなので、XMLDSigなどは使用できません。

結果は、これらのヘッダとメールでなければなりません予想:

  • のContent-Type:アプリケーション/ PKCS7-MIME;名前= "smime.p7m"; SMIME型=包まデータ
  • コンテンツ転送 - エンコード:base64で
+0

私は署名と暗号化について話すことはできませんが、電子メールの場合はhttp://camel.apache.org/mail.htmlを使用できます。メッセージはプレーンテキストとして扱われるので、必要な符号と暗号化ライブラリを使用してコンテンツタイプとエンコーディングを設定することができます。 –

+0

私は現在、標準的なラクダメールコンポーネントを使用しています。 私は、javax.mail.internet.MimeMessageを、javax.mail.Multipartとして格納されたボディと添付ファイルで作成する必要があると考えています。このMimeMessageは署名と暗号化が可能です。 MimeMessage全体をExchangeから本文として追加し、smtpで送信するとうまくいきます。 – lahu89

+0

Cryptoデジタル署名専用のCamelコンポーネントがあります:http://camel.apache.org/crypto-digital-signatures.html。 Camelのすべてのセキュリティ上の懸念の別のリンクhttp://camel.apache.org/security.html –

答えて

0

私はキャメルのユーザーではないが、私は興味があったし、それを遊ん。あなたが望むのは、S/MIMEの署名と暗号化です。 CamelにはMIME-Multipartデータ形式、PGP暗号化(ただし対称のみ)、Sign/Verify(暗号化なし)があります - これは現在のところ利用できませんが、ticketは2015年2月に作成されて以来、署名付きの暗号化された電子メールのために有効なS/MIMEエンベロープを実際に取得するためにそれらを組み合わせる方法はありません。また、PGPはS/MIMEではなく、その逆もあります。

私はJavaMail + BouncyCastleライブラリを使ってそのような電子メールを作成して送信する方法を知っていますが、サンプルコードもあります。理論的には、JavaMail + BouncyCastleを介してMIMEメッセージを作成し、Camelを使用してそれを送信するか、独自のS/MIMEエンドポイントまたはデータフォーマットを作成することができます(必要がない場合はマーシャリングおよびアンマーシャリングをスキップするための少なくとも一方向)。しかし、箱から私はそれを行う方法を見つけていない。私は、入力エンドポイントで事前に設定署名&暗号化されたMIME部分を入れて、これを行う場合であっても

...

.setHeader("From", simple("[email protected]")) 
.setHeader("To", simple("[email protected]")) 
.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経由でも非常に簡単ですが、迷惑です)。エンドポイントやデータ形式はS/MIMEメッセージの構成には適していないため、現在はCamelインフラストラクチャを実際に使用することはできません。

+0

私はラクダでは署名と暗号化が利用できないと指摘したので、私はあなたの答えを受け入れます。自分の答えを自分の答えで記述しました。 – lahu89

1

私は送信の問題を解決しました。

私は新しいからのようにすべての必要なパラメータとのMimeMessage、受信者対象と内容(本文と添付ファイル付きのマルチパート)を作成しました。

BouncyCastle I signedおよびencryptedこのMimeMessage。

結果のMimeMessageを本文として設定し、標準のラクテルメールエンドポイントで送信しました。必要なすべてのパラメータは、MimeMessage自体から選択され、交換ヘッダーからは選択されません。私もラクダメール標準を使用しますが、私は前処理なしで受信javax.mail.Messageの自体を処理することができ、パラメータmapMailMessage = falseをとなり受信用

。解読のために私はBouncyCastleも使用します。

+0

だから基本的に私は私の答えに記述したことをやっているだけです。私は助けることができてうれしいです。しかし、1つの質問が返されます:あなたが説明したようにメッセージを送信する場合は、ThunderbirdやOutlookやLotus Notesのような標準的なメールクライアントで読むことができますか?あなた自身の自家製Camelソリューションでそれらを読むことができれば、IMOは実際の電子メールの世界ではあまり価値がありません。 – kriegaex

+0

はい、問題なくOutlookやGmailで読むことができます。私は暗号化せずに署名されたメールを送信し、それらも有効です。 私の目標は有効な署名入りの暗号化されたメールを作成することでした。それ以外の場合、私にとっては役に立たないでしょう。署名と暗号化はRFCに基づいてBouncyCastleから行われるため、すべてのメールクライアントから受け付ける必要があります。 – lahu89

+0

非常に興味深い。あなたはそれをやった方法についてちょっとしたコードスニペットを投稿してもよろしいですか?私はあなたから学ぶのが好きです。私自身の例でそれを試して、送っている部分を置き換えたいと思います。前もって感謝します。 – kriegaex

関連する問題