Devo fare qualche precisazione e un mea culpa, perchè ho fatto queste prove qualche settimana fa e non ricordavo alcuni dettagli che ho notato andando a ripescare i messaggi... però, in parte, credo che il risultato sia valido, almeno come stimolo per approfondire con qualche test. Il punto è che il mio allegato di prova conteneva del testo (in realtà, dell'html - avevo messo del corsivo) ed era inserito con disposition inline; però, se non sbaglio, all'inizio della nostra "telenovela" (scusate, ma un po' d'ironia a quest'ora è il minimo per mantenere lucidità :p) avevate fatto delle verifiche con degli allegati p7m contenenti solo testo (a parte la firma), e se non sbaglio gli allegati di testo vengono trattati da tb come inline (o no?
).
Parto dall'inizio: avevo installato openssl per generare dei certificati da usare con due miei indirizzi email, quindi avevo creato due profili in tb (senza plugin) impostando il dispositivo di sicurezza software e inserendo i certificati (e abilitandoli manualmente all'occorrenza, perchè mi si è presentato anche il bug relativo cui si era accennato nelle scorse puntate); devo aggiungere, per completezza, che in almeno uno dei profili ho caricato entrambi i certificati, con le rispettive coppie di chiavi. A questo punto, tra i vari tentativi per capire un po' la situazione ho notato che abilitando la firma E la cifratura di un messaggio email si ottiene un messaggio non multipart (cosa che non mi piace troppo, ma è un altro discorso, e si finisce per tirare in ballo un altro bug, anche questo accennato in precedenza), con il "corpo" vuoto e un allegato (unica presenza dopo gli header iniziali) di tipo "application/x-pkcs7-mime" e con nome file "smime.p7m". Questo mi ha fatto pensare a qualcosa che avevo letto sul sito di infocamere (o era l'help di dike? boh, non lo so più neanch'io
) riguardo alle prescrizioni del CNIPA sull'apposizione di firma digitale in un file che avrebbe cambiato il nome in <nome_originario>.<estensione_originaria>.p7m (e chiaramente sarebbe diventato un file smime multipart con il file iniziale inserito nella prima sezione, seguito dalla signature). Ed ecco che mi si accende la lampadina: non sia mai che per la PA italiana un pkcs7 rappresenta sempre e solo un file con firma mentre per tb è sempre e solo un file firmato e cifrato? Forse non c'entra niente, però ho voluto fare la prova: ho aperto il messaggio attraverso la webmail (non riuscendo a leggere niente, perchè non supportava smime), ho scaricato in locale l'allegato smime.p7m, e l'ho inviato, attraverso tb (mi viene il dubbio di aver usato la webmail, ma cambia poco o niente), come allegato in un messaggio in chiaro: risultato, ottengo un messaggio multipart con il corpo del messaggio (plain text) seguito dall'allegato, inserito inline, con nome "smime.p7m" e myme-type
application/pkcs7-mime (content-disposition: inline e transfer-encoding: base64), illegibile da webmail, ma leggibilissimo da tb! E questo ha fatto crescere i miei sospetti in merito.
Naturalmente potrei essere completamente fuori strada, ma potrebbe anche darsi che, in presenza di un allegato p7m (da
inviare) TB pensi che si tratti di un file criptato, e non possedendo (o credendo di non possedere) la chiave privata necessaria a decifrarlo non lo interpreti e si limiti a spedirlo come pkcs7-mime, fidandosi sul contenuto: questo si potrebbe verificare prendendo un qualsiasi file (anche di testo), aggiungendo l'estensione p7m (o modificando quella originaria), e spedendolo, per vedere se il mime type diventa automaticamente application/pkcs7-mime anche senza la presenza di firma nè di crittografia. Veniamo al ricevimento: se davvero tb considerasse come cifrato qualsiasi allegato con mime type facente riferimento al protocollo pkcs7, allora potrebbe incorrere in un problema al momento della decodifica e saltarlo (l'errore potrebbe compromettere anche la corretta interpretazione degli altri allegati, anche se non ho ben capito se il problema si presenta sempre, o in maniera aleatoria, o con alcuni tipi di file in particolare).
E' anche possibile che TB interpreti correttamente i file .p7m e determini il mime-type prima di spedirli (nel qual caso avrebbe dovuto decifrare e poi validare il mio file di prova; in ogni caso credo di aver verificato che per tb un pkcs7-mime è
anche un file cifrato, quindi IMHO vale la pena di verificare che non sia
sempre e solo un file cifrato), e, come suggerisce klades, il problema sorga per l'assenza di una signature a se stante, all'interno del messaggio ed esterna al p7m (ma allora perchè è riuscito a leggere il mio allegato cifrato e con firma incorporata? oltretutto, sarebbe un'implementazione, credo, molto irregolare, visto che la/e sezione/i pkcs7-signature a livello del messaggio - e non incorporate in un allegato - dovrebbero riferirsi all'intero messaggio, non ad una sua parte, o sbaglio?).
~~~~~~~
Veniamo ai test, visto che guia78 si è offerto come cavia (
). Intanto, vediamo di intenderci su alcuni punti: mi aspetto che il programma di firma digitale si appoggi ad un lettore di smartcard che all'occorrenza possa essere utilizzato come dispositivo di sicurezza da TB per il supporto interno a smime, o comunque le chiavi siano disponibili sia per il programma esterno sia per TB (inserendole nel "dispositivo di sicurezza software" interno - avendo cura di verifacare, subito dopo, che i certificati siano abilitati, con un segno di spunta, per tutti gli usi - se non erro la procedura è spiegata nelle faq di TB). Forse sarebbe il caso di ripetere le prove su più di un sistema operativo (più che altro per cercare possibili differenze nell'apertura e analisi, se effettuata, del file in locale prima di spedirlo con il giusto mime type - io ho fatto qualche test solo su win). Ma passiamo alle prove che mi sono venute in mente:
1) Profilo pulito (no plugin), nessun certificato utilizzabile da tb (ma è indifferente)
Prendi un file di testo (o di altro tipo, oppure fai più di una prova con file diversi), cambia l'estensione in .p7m (oppure aggiungila alla fine, o fai entrambe le prove
), e spediscilo con tb come allegato a una mail che contiene qualche fesseria tanto per aggiungere del testo, quindi accedi alla casella di posta con tb, apri il messaggio (non dovresti vedere l'allegato) e accedi al sorgente (ctrl + u): se l'allegato è definito come application/pkcs7, allora vuol dire che l'invio si basa sull'estensione del file e non sul contenuto (del resto, potrebbe anche essere un file cifrato che tb non può leggere).
2) Profilo pulito, nessun certificato accessibile a tb
Prendi un file p7m "regolare" già usato in prove precedenti, quindi contenente la firma, cifralo e spediscilo con tb, come allegato ad un messaggio che contiene del testo, possibilmente allegando anche un file (non firmato) che nelle prove precedenti risultava non leggibile, quindi verifica il comportamento di tb in ricezione del messaggio (se ho ragione, non dovresti vedere nulla perchè non hai le chiavi per decifrarlo); controlla (e magari posta) l'header della sezione relativa (in particolare, content-type e disposition).
3) Profilo pulito, certificati accessibili
Come prima, però crea un p7m che contenga solo testo e vedi che succede (posta di nuovo gli header); aggiungi anche l'allegato non firmato.
4) Profilo pulito, certificati accessibili
Come prima, però crea (o riusa) un p7m non di testo (che so, firma un pdf o un doc), sarebbe meglio usare un p7m (non di testo) che abbia dato problemi con un allegato non firmato, da accodare, per verificare il comportamento in questo caso (e riposta gli header degli allegati
)
5) Profilo con plug-in, certificati accessibili
Nessun allegato, solo un messaggio di testo firmato e cifrato (o solo cifrato, o, meglio, entrambi i casi separatamente) per verificare "sul campo" che l'estensione di klades intervenga solo sulla lettura dei messaggi e non, anche, nella loro creazione, laddove serva il supporto nativo a smime (probabilmente non darà problemi, dato che un messaggio cifrato viene prodotto da tb come un application/
x-pkcs7-mime, che è il vecchio mime-type per i p7m, e probabilmente vengono gestiti diversamente, ma un test male non fa
e non dimenticare gli header
).
Bye