2016-02-29 14 views
6

Voglio firmare e crittografare la mia posta.Mail signing e encrypting

La mia versione attuale di cammello è 2.13.0.

Esiste una funzionalità di cammello che posso utilizzare per questo scopo?

Il corpo è in chiaro, pertanto XMLDSig non può essere utilizzato.

Previsto risultato dovrebbe essere una mail con queste intestazioni:

  • Content-Type: application/pkcs7-mime; name = "smime.p7m"; smime-type =-dati avvolto
  • Content-Transfer-Encoding: base64
+0

Non posso parlare della parte relativa al segno e alla crittografia, ma per la posta elettronica è possibile utilizzare http://camel.apache.org/mail.html. Suppongo che dal momento che il messaggio sia trattato come testo semplice, puoi utilizzare qualsiasi libreria di firma e crittografia che desideri e impostare il tipo di contenuto e la codifica. –

+0

Attualmente utilizzo il componente standard della posta cammello. Credo di dover creare un javax.mail.internet.MimeMessage con corpo e allegati memorizzati come javax.mail.Multipart. Questo MimeMessage può essere firmato e crittografato. Quando aggiungo l'intero MimeMessage come corpo dallo scambio e lo invio con smtp, dovrebbe funzionare. – lahu89

+0

Esiste un componente Camel specifico per le firme digitali Crypto: http://camel.apache.org/crypto-digital-signatures.html. E un altro link per tutti i problemi di sicurezza in Camel http://camel.apache.org/security.html –

risposta

0

io non sono un utente cammello, ma ero curioso e giocato intorno con esso. Quello che vuoi è la firma e la crittografia S/MIME. Questo non è al momento disponibile, ma c'è uno ticket per il quale non ha mai avuto risposta da quando è stato creato a febbraio 2015. Camel ha un formato dati MIME-Multipart, crittografia PGP (ma solo simmetrica), Sign/Verify (senza crittografia) - ma non vedo alcun modo di combinarli per ottenere una busta S/MIME valida per una e-mail con segno + crittografato. Inoltre, PGP non è S/MIME e viceversa.

So come comporre e inviare tale e-mail tramite la libreria JavaMail + BouncyCastle, ho persino un codice di esempio. In teoria è possibile creare il messaggio MIME tramite JavaMail + BouncyCastle e quindi utilizzare Camel per inviarlo o creare il proprio endpoint S/MIME o il formato dati (almeno unidirezionale per il marshalling e saltare unmarshalling se non è necessario). Ma fuori dagli schemi non ho trovato il modo di farlo.


Aggiornamento:

Anche se ho messo una firma & parte MIME crittografato preconfigurato sull'endpoint di ingresso e di fare questo ...

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

... e la posta è inviati, client di posta come Thunderbird non possono realmente disppare la posta perché l'endpoint di posta Camel sovrascrive lo Content-Transfer-Encoding con un valore di 7bit. C'è another ticket per questo problema, ma anche non risolto da giugno 2014. Quindi per il momento non è nemmeno possibile utilizzare l'endpoint della posta per inviare il messaggio dopo averlo creato tramite JavaMail e BouncyCastle. Devi anche inviarlo da solo (anche molto semplice tramite JM + BC, ma fastidioso). Al momento non è possibile utilizzare realmente l'infrastruttura Camel perché endpoint e formati di dati non sono adatti alla composizione dei messaggi S/MIME.

+0

Accetto la tua risposta perché hai sottolineato che la firma e la crittografia non sono disponibili in cammello. Ho descritto la mia soluzione in una risposta personale. – lahu89

1

Ho risolto il problema per l'invio.

Ho creato un nuovo MIMEMessage con tutti i parametri richiesti come da, destinatario, soggetto e il contenuto (Multipart con il corpo e gli allegati).

Con BouncyCastle I signed e encrypted questo MimeMessage.

Ho impostato il MIMEMessage risultante come corpo e l'ho inviato con l'endpoint di posta cammello standard. Tutti i parametri richiesti verranno selezionati dal MimeMessage stesso e non dalle intestazioni di scambio.

Per ricevere userò anche lo standard di posta cammello, ma con il parametro mapMailMessage = false che posso elaborare il ricevuto javax.mail.Message se stessa, senza pre-elaborazione. Per decifrare userò anche BouncyCastle.

+0

Quindi, in pratica, fai solo ciò che ho descritto nella mia risposta. Sono contento di poterti aiutare. Ma una domanda in cambio: se si invia il messaggio come descritto, è possibile leggerlo con client di posta standard come Thunderbird o Outlook o Lotus Notes? Se riesci a leggerli con la tua soluzione home-camel, IMO, non valgono molto nel mondo reale delle e-mail. – kriegaex

+0

Sì, posso leggerli con Outlook e Gmail senza problemi. Ho anche inviato mail firmate senza crittografia e sono anche valide. Il mio obiettivo era creare mail firmate e criptate valide altrimenti sarebbe inutile per me. La firma e la crittografia vengono eseguite da BouncyCastle in base a RFC, pertanto devono essere accettate da tutti i client di posta. – lahu89

+0

Molto interessante. Ti dispiacerebbe postare un piccolo frammento di codice su come l'hai fatto? Mi piace imparare da te, tit per tat. :-) Mi piacerebbe provarlo nel mio esempio e sostituire la parte di invio manuale. Grazie in anticipo. – kriegaex