From: Fanton F. <fa...@ks...> - 2004-04-16 17:10:11
|
Salve, abbiamo notato che in certe condizioni i MUA non considerano valida=20 la firma digitale dei documenti di trasporto; il messaggio restituito=20 =E8 del tipo "Il contenuto del messaggio potrebbe essere stato = modificato". Il problema sembra essere dovuto a due fattori: 1. durante la generazione del documento di trasporto non viene fissato=20 il tipo di encoding del messaggio originale allegato. Questo fa si che la libreria MIME imposti un valore di default, il pod = di MIME::Entit=E0 riporta: "If you don't specify it, a reasonable default = is=20 put in". Quando l'MTA prende in carico la mail fa una "canonizzazione" = del=20 contenuto modificando, se caso, l'header e quindi generando i problemi = suddetti. Il problema =E8 stato risolto fissando l'encoding a 7bit. 2. il metodo get_mime di OpenCA::OpenSSL::SMIME, chiamato dopo la firma, = chiama il parser di MIME::Parser. Il pod di MIME::Parser ci dice che il parser non garantisce = l'inalterabilit=E0 dei dati e di fare attenzione specialmente quando entrano in gioco = sistemi=20 di firma: (da http://search.cpan.org/~eryq/MIME-tools-5.411a/lib/MIME/Tools.pm) "Parsing is a (slightly) lossy operation.=20 Because of things like ambiguities in base64-encoding,=20 the following is not going to spit out its input unchanged in all = cases: $entity =3D $parser->parse(\*STDIN); $entity->print(\*STDOUT); If you're using MIME::Tools to process email, remember to save the = data=20 you parse if you want to send it on unchanged. This is vital for = things=20 like PGP-signed email." Cos=EC non possiamo assolutamente utilizzare il parser dopo aver = eseguito=20 l'operazione di firma. Inoltre analizzando OpenCA::OpenSSL::SMIME e OpenCA::X509 abbiamo notato = che,=20 oltre all'uso scorretto del parser, vengono creati molti file temporanei = alcuni dei quali, nel nostro caso, inutili (come il certificato e la=20 chiave privata). Per tagliare la testa al toro abbiamo riscritto la = libreria=20 Sign.pm con solo il codice necessario evitando di caricare OpenCA. I risultati hanno evidenziato, oltre alla soluzione del bug, una = diminuzione=20 drastica dei tempi di elaborazione. Saluti, flazan e luca76. |