2016-02-29 17 views
6

Chcę podpisać i zaszyfrować moją pocztę.Podpisywanie i szyfrowanie poczty

Moja obecna wersja wielbłąda to 2.13.0.

Czy istnieje funkcja wielbłąda, którą mogę wykorzystać do tego celu?

Ciało to zwykły tekst, dlatego nie można użyć XMLDSig.

Oczekiwany wynik powinien być poczta z tych nagłówków:

  • Content-Type: application/PKCS7-mim; name = "smime.p7m"; smime-type = otoczek-data
  • Content-Transfer-Encoding: base64
+0

Nie mogę mówić o znaku i części szyfrowania, ale w przypadku wiadomości e-mail można użyć http://camel.apache.org/mail.html. Zgaduję, że ponieważ wiadomość jest traktowana jako zwykły tekst, możesz użyć dowolnej szyfrującej biblioteki szyfrującej i ustawić typ zawartości i kodowanie. –

+0

Używam obecnie standardowego komponentu poczty wielbłądziej. Wierzę, że muszę utworzyć javax.mail.internet.MimeMessage z treścią i załącznikami przechowywanymi jako javax.mail.Multipart. Ta MimeMessage może być podpisana i zaszyfrowana. Kiedy dodaję cały MimeMessage jako ciało z giełdy i wyślę go za pomocą smtp, powinno to zadziałać. – lahu89

+0

Istnieje komponent Camel specjalnie dla podpisów cyfrowych Crypto: http://camel.apache.org/crypto-digital-signatures.html. I kolejny link do wszystkich kwestii bezpieczeństwa w Camel http://camel.apache.org/security.html –

Odpowiedz

0

nie jestem użytkownikiem Camel, ale byłem ciekaw i bawił się z nim. To czego potrzebujesz to podpisywanie i szyfrowanie S/MIME. To jest obecnie niedostępne, ale jest tam ticket, który nie otrzymał żadnej odpowiedzi, ponieważ został utworzony w lutym 2015. Camel ma format danych MIME-Multipart, szyfrowanie PGP (ale tylko symetryczne), Sign/Verify (bez szyfrowania) - ale nie widzę sposobu, aby je połączyć, aby naprawdę uzyskać prawidłową kopertę S/MIME dla podpisanego + zaszyfrowanego e-maila. Poza tym PGP nie jest S/MIME i na odwrót.

Wiem, jak skomponować i wysłać taki e-mail przez bibliotekę JavaMail + BouncyCastle, nawet mam dla niego przykładowy kod. Teoretycznie możesz utworzyć komunikat MIME za pośrednictwem JavaMail + BouncyCastle, a następnie użyć Camel do wysłania lub stworzenia własnego punktu końcowego S/MIME lub formatu danych (przynajmniej jednokierunkowy do zestawiania i pomijanie tworzenia niezałatwionych, jeśli go nie potrzebujesz). Ale po wyjęciu z pudełka nie znalazłem sposobu na zrobienie tego.


Aktualizacja:

Nawet jeśli kładę prekonfigurowany podpisaną & zaszyfrowaną część MIME na końcowym wejściowego i to zrobić ...

.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")) 

... a poczta jest wysyłane, klienci pocztowi, tacy jak Thunderbird, nie mogą naprawdę odrzucić poczty, ponieważ punkt końcowy poczty wielbłądziej nadpisuje numer Content-Transfer-Encoding o wartość 7bit. Jest another ticket dla tego problemu, ale również nierozwiązany od czerwca 2014. Więc na razie nie możesz nawet użyć punktu końcowego poczty, aby wysłać wiadomość po zbudowaniu jej przez JavaMail i BouncyCastle. Musisz nawet wysłać go sam (również bardzo prosty poprzez JM + BC, ale denerwujący). Obecnie nie można tak naprawdę korzystać z infrastruktury Camel, ponieważ punkty końcowe i formaty danych nie nadają się do kompozycji wiadomości S/MIME.

+0

Akceptuję twoją odpowiedź, ponieważ wskazałeś, że podpisywanie i szyfrowanie nie jest dostępne na wielbłądach. Moje rozwiązanie opisałem we własnej odpowiedzi. – lahu89

1

Rozwiązałem problem dotyczący wysyłania.

stworzyłem nową MimeMessage ze wszystkimi wymaganymi parametrami jak z, odbiorca, przedmiotem i treść (Multipart z ciała i załączników).

Z BouncyCastle I signed i encrypted ten MimeMessage.

Ustawiam wynikowy MimeMessage jako ciało i wysłam go ze standardowym punktem końcowym z kamelowej poczty. Wszystkie wymagane parametry zostaną wybrane z samego MimeMessage, a nie z nagłówków wymiany.

Do odbioru użyję również standard poczty wielbłąda ale z parametrem mapMailMessage = false że mogę przetwarzać odebraną javax.mail.Message sama bez wstępnego przetwarzania. Do odszyfrowania używam również BouncyCastle.

+0

Więc po prostu rób to, co opisałem w mojej odpowiedzi. Cieszę się, że mogłem pomóc. Ale jedno pytanie w zamian: Jeśli wysyłasz wiadomość zgodnie z opisem, czy możesz ją przeczytać za pomocą standardowych klientów pocztowych, takich jak Thunderbird, Outlook lub Lotus Notes? Jeśli możesz po prostu je przeczytać przy pomocy własnego rozwiązania Camel dla homebrew, IMO, nie są one warte wiele w prawdziwym świecie e-maili. – kriegaex

+0

Tak, mogę je odczytać w Outlooku i Gmailu bez problemów. Wysłałem również podpisane wiadomości bez szyfrowania i są one również ważne. Moim celem było stworzenie prawidłowych, podpisanych i zaszyfrowanych maili, w przeciwnym razie byłoby to dla mnie bezużyteczne. Podpisywanie i szyfrowanie odbywa się z BouncyCastle w zależności od RFC, dlatego powinno być akceptowane od każdego klienta pocztowego. – lahu89

+0

Bardzo interesujące. Czy mógłbyś opublikować mały fragment kodu o tym, jak to zrobiłeś? Lubię uczyć się od ciebie, sikam na tat. :-) Chciałbym wypróbować to na moim własnym przykładzie i zastąpić maual wysyłającą część. Z góry dziękuję. – kriegaex