Notizie: puoi sempre seguire i nostri aggiornamenti su Twitter (@MozillaItalia) e Facebook (/MozillaItalia)

Autore Topic: Allegati firmati digitalmente .P7M  (Letto 179695 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Allegati firmati digitalmente .P7M
« Risposta #270 il: 27 Aprile 2008 14:04:07 »
Qui potete trovare una nuova versione - ancora sperimentale ma credo funzionante senza problemi - con queste caratteristiche:
https://nic-nac-project.org/~kaosmos/test/

- di default disabilita il supporto nativo di TB ai file p7m (il che vuol dire che li vedete come normali allegati)
- se però selezionate un messaggio cifrato, il supporto viene automaticamente abilitato per consentire di vederlo (nei limiti intrinseci della capacità di TB)

Il nome è cambiato (SmartP7mSupport) per renderlo più... veritiero :-)

@ xeal: non è questa la sede per addentrarci troppo in cose tecniche. Posso solo dirti che molte delle tue idee richiedono la modifica del codice sorgente di TB oppure la costruzione di un apposito plugin - cose entrambe che vanno molto al di là delle mie competenze.
La versione attuale dell'estensione credo sfrutti al massimo quello che si può ottenere da un'estensione.

@ guia78: ci credo!!! Ti mando una email che ti chiarirà un po' meglio le cose.


Offline Underpass

  • I've got fabric to sell
  • Amministratore
  • Post: 24618
    • Mozilla Italia
Re: Allegati firmati digitalmente .P7M
« Risposta #271 il: 27 Aprile 2008 14:13:33 »
Paolo, ti trovi facendo: mandala pure a me! :P

Offline xeal

  • Post: 21
Re: Allegati firmati digitalmente .P7M
« Risposta #272 il: 01 Maggio 2008 19:36:13 »
Dunque, ho fatto una prova con l'estensione attiva e i messaggi già inviati: sembra funzionare bene. Unico piccolo appunto, a volte tende a essere un po' lenta nello switch: se, appena aperto tb e collegato alla casella email, apro per primo un messaggio cifrato, tutto funziona bene, ma se subito dopo ne apro uno con allegato p7m, allora inizialmente il messaggio non presenta allegati, fino a quando, dopo qualche secondo, viene ricaricato e visualizzato correttamente (ecco, impiega qualche secondo, sul mio pc, a ricaricare il messaggio, ma solo quando il supporto interno a smime viene abilitato in un altro messaggio, e solo la prima volta); nel complesso, mi sembra più che accettabile ;)

Ho dato un'occhiata al codice: mi chiedevo, l'istanza del messaggio che ottieni nella funzione "pkcs7StreamMsg" è in sola lettura, oppure è accessibile anche in scrittura? Perchè, nel secondo caso, forse si potrebbe giocare un po' con la funzione "processHeaders" dello streamListener (ad esempio, contare il numero delle sezioni di un multipart/mixed e, se risulta uguale a 1, togliere la parte relativa a multipart mixed - si risolverebbe l'incompatibilità con gli altri browser - oppure, se maggiore di uno, andare a trasformare "application/pkcs7-mime" in "application/octet-stream", quindi ricaricare il messaggio così modificato - forse, però, la funzione reload andrebbe a recuperare il messaggio sul server, quindi magari non funziona... in tal caso, come non detto :D).

Altra cosa: il metodo autoRegister si occupa anche di eliminare copie precedentemente registrate, oppure no? In questo caso, magari è questo il motivo per cui devi andare a modificare la data dell'handler prima di poterlo registrare: sembra quasi che ad ogni chiamata della funzione switcher vai ad aggiungere un nuovo componente alla lista degli handler, e tb te lo lascia fare solo se il file con lo stesso nome ha una datazione più recente perchè in questo modo potrà scegliere tra i due quale usare (se così fosse, si rischia un'occupazione della memoria in qualche modo anomala). Possibile soluzione: sposta le variabili hanlder1 e handler2 all'esterno di "pkcs7SupportSwitcher", come variabili globali, o di prototipo (pkcs7SupportSwitcher.prototype.hanler1), oppure statiche (pkcs7SupportSwitcher.handler1; pkcs7SupportSwitcher.handler2 - in questo caso, meglio chiamarle così all'interno della funzione) e inizializzale a null, quindi all'inizio della funzione metti un if per cancellarne la registrazione prima di ricrearle e registrarle (naturalmente, prima dell'if devi inizializzare la variabile reg).

Buon primo maggio :)


Edit: Ho fatto qualche piccola ricerca e comincio ad arrendermi all'evidenza che è praticamente impossibile modificare qualcosa in scrittura, almeno senza fare i salti mortali senza protezione, quindi desisto anch'io :P
« Ultima modifica: 02 Maggio 2008 01:49:17 da xeal »

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Allegati firmati digitalmente .P7M
« Risposta #273 il: 02 Maggio 2008 10:25:47 »
Dunque, ho fatto una prova con l'estensione attiva e i messaggi già inviati: sembra funzionare bene. Unico piccolo appunto, a volte tende a essere un po' lenta nello switch: se, appena aperto tb e collegato alla casella email, apro per primo un messaggio cifrato, tutto funziona bene, ma se subito dopo ne apro uno con allegato p7m, allora inizialmente il messaggio non presenta allegati, fino a quando, dopo qualche secondo, viene ricaricato e visualizzato correttamente (ecco, impiega qualche secondo, sul mio pc, a ricaricare il messaggio, ma solo quando il supporto interno a smime viene abilitato in un altro messaggio, e solo la prima volta); nel complesso, mi sembra più che accettabile ;)

Può essere che ottimizzando il codice (cosa che sto facendo) questi piccoli ritardi spariscano, comunque, come hai già detto tu, mi sembra che sia un compromesso accettabile.

Ho dato un'occhiata al codice: mi chiedevo, l'istanza del messaggio che ottieni nella funzione "pkcs7StreamMsg" è in sola lettura, oppure è accessibile anche in scrittura?


E' in sola lettura e - in un certo senso - è lo streaming che corrisponde al messaggio che vedi e viene creato in base ad esso.
Infatti ad esempio, senza estensione, gli allegati p7m sono invisibili a quello stream.


Altra cosa: il metodo autoRegister si occupa anche di eliminare copie precedentemente registrate, oppure no? In questo caso, magari è questo il motivo per cui devi andare a modificare la data dell'handler prima di poterlo registrare: sembra quasi che ad ogni chiamata della funzione switcher vai ad aggiungere un nuovo componente alla lista degli handler, e tb te lo lascia fare solo se il file con lo stesso nome ha una datazione più recente perchè in questo modo potrà scegliere tra i due quale usare (se così fosse, si rischia un'occupazione della memoria in qualche modo anomala). Possibile soluzione: sposta le variabili hanlder1 e handler2 all'esterno di "pkcs7SupportSwitcher", come variabili globali, o di prototipo (pkcs7SupportSwitcher.prototype.hanler1), oppure statiche (pkcs7SupportSwitcher.handler1; pkcs7SupportSwitcher.handler2 - in questo caso, meglio chiamarle così all'interno della funzione) e inizializzale a null, quindi all'inizio della funzione metti un if per cancellarne la registrazione prima di ricrearle e registrarle (naturalmente, prima dell'if devi inizializzare la variabile reg).

Magari proverò la tua idea, non so però se risolve... comunque credo non siano ammesse due registrazioni dello stesso componente, la successiva annulla la precedente, come puoi vedere dal file compreg.dat.
Tutto sommato non il problema di aggiornare ogni volta la data dei file di appoggio, non mi sembra un grosso problema.

Buon primo maggio :)

E - già che ci siamo - anche buon due maggio :-)
« Ultima modifica: 05 Maggio 2008 12:07:08 da flod »

Offline xeal

  • Post: 21
Re: Allegati firmati digitalmente .P7M
« Risposta #274 il: 02 Maggio 2008 19:16:58 »
Visto che siamo in vena di qualche piccola ottimizzazione nell'uso degli handler, aggiungo qualcosina (mi rendo conto che di questo passo diventerò fastidioso :P). Non che sia necessario, ma almeno si evita di ricreare ogni volta gli stessi oggetti.

Codice: [Seleziona]
var handlers = {
     switch_on_handlers : {
          correctMIMEHandler : null, // for the standard mime type: "application/pkcs7-mime"
          oldMIMEHandler : null, // for the compatibility mode mime type: "application/x-pkcs7-mime"
          wrongMIMEHandler : null //for the wrong mime type: "application/pkcs7"
     },

     switch_off_handlers : {
          correctMIMEHandler : null,
          oldMIMEHandler : null,
          wrongMIMEHandler : null         
     },

     last_registered : null,

     registrar : null,

     inited : false,

     init : function(){
          if (handlers.inited)
               throw Components.results.NS_ERROR_ALREADY_INITIALIZED;

          //- defining the basical handler structure
          var tmp = Components.classes["@mozilla.org/file/directory_service;1"]
                         .getService(Components.interfaces.nsIProperties)
                         .get("ProfD", Components.interfaces.nsIFile);
          tmp.append("extensions");
          tmp.append("{1199032f-b0f2-4552-a7c0-21f6a60df93a}");
          tmp.append("handlers");

          //- specializing handlers
          ( handlers.switch_on_handlers.correctMIMEHandler = tmp.clone() )
                  .append("pkcs7ON.js");
          ( handlers.switch_on_handlers.oldMIMEHandler = tmp.clone() )
                   .append("x-pkcs7ON.js");
          ( handlers.switch_on_handlers.wrongMIMEHandler = tmp.clone() )
                   .append("wrong-pkcs7ON.js");

          ( handlers.switch_off_handlers.correctMIMEHandler = tmp.clone() )
                    .append("pkcs7OFF.js");
          ( handlers.switch_off_handlers.oldMIMEHandler = tmp.clone() )
                    .append("x-pkcs7OFF.js");
          ( handlers.switch_off_handlers.wrongMIMEHandler = tmp.clone() )
                    .append("wrong-pkcs7OFF.js");

          //- initializing registrar
          handlers.registrar = Components.manager.QueryInterface(
                                            Components.interfaces.nsIComponentRegistrar);

          tmp = null; handlers.inited = true;
     },

     switchON : function(){
          if(! handlers.inited ) //- registering or unregistering null objects causes side effects
               throw Components.results.NS_ERROR_NOT_INITIALIZED;

          //- we avoid to repeat registrations
          if( handlers.last_registered == handlers.switch_on_handlers ) return;

          if( handlers.last_registered != null ){
               handlers.registrar.autoUnregister(handlers.last_registered.correctMIMEHandler);
               handlers.registrar.autoUnregister(handlers.last_registered.oldMIMEHandler);
               handlers.registrar.autoUnregister(handlers.last_registered.wrongMIMEHandler);
          }

          handlers.registrar.autoRegister(handlers.switch_on_handlers.correctMIMEHandler);
          handlers.registrar.autoRegister(handlers.switch_on_handlers.oldMIMEHandler);
          handlers.registrar.autoRegister(handlers.switch_on_handlers.wrongMIMEHandler);

          handlers.last_registered = handlers.switch_on_handlers;         
     },

     switchOFF: function(){
          if(! handlers.inited ) //- registering or unregistering null objects causes side effects
               throw Components.results.NS_ERROR_NOT_INITIALIZED;

          //- we avoid to repeat registrations
          if( handlers.last_registered == handlers.switch_off_handlers ) return;

          if( handlers.last_registered != null ){
               handlers.registrar.autoUnregister(handlers.last_registered.correctMIMEHandler);
               handlers.registrar.autoUnregister(handlers.last_registered.oldMIMEHandler);
               handlers.registrar.autoUnregister(handlers.last_registered.wrongMIMEHandler);
          }

          handlers.registrar.autoRegister(handlers.switch_off_handlers.correctMIMEHandler);
          handlers.registrar.autoRegister(handlers.switch_off_handlers.oldMIMEHandler);
          handlers.registrar.autoRegister(handlers.switch_off_handlers.wrongMIMEHandler);

          handlers.last_registered = handlers.switch_off_handlers;         
     }
}


Ho inserito un terzo handler per il caso in cui si presentasse un mime type del tipo "application/pkcs7" senza il "-mime" finale, perchè in alcune prove, con dike installato, gli allegati venivano generati con questo content-type. In questo modo, dovrebbe essere correttamente leggibile anche un messaggio criptato (secondo lo standard di tb) che presentasse questo mime type: se vuoi implementarlo così, sarà necessario creare una coppia di script per attivare e disattivare il supporto (identici agli altri ma con questo mime type - se vuoi puoi aggiungerne altri due, e sistemare l'oggetto qui sopra, per l'eventuale content-type "application/x-pkcs7"), altrimenti togli la parte relativa dal codice qui sopra. A questo punto, le altre funzioni diventano:

Codice: [Seleziona]
function pkcs7SupportLoad() {
window.removeEventListener("load", pkcs7SupportLoad, true);
        handlers.init();
pkcs7SupportSwitcher(true, true);
if ( document.getElementById("threadTree") ) {
document.getElementById("threadTree").addEventListener("select",
                                                                        pkcs7StreamMsg, false);
}
}


function pkcs7supportSwitcher(disable, dontReload){
        if(disable){
                 handlers.switchOFF();
        }else{
                 handlers.switchON();
        }

        if( !dontReload && gDBView ){
gDBView.reloadMessage();
        }
}

Così dovrebbe funzionare tutto (forse un pelo più velocemente). Un ultimo affinamento potrebbe consistere nel mostrare all'utente un qualche avviso prima dello switch, per bloccare le operazioni fino al completamento dello switch stesso (potrebbe bastare una finestra modale di dialogo che blocca la finestra principale per qualche istante, si dovrebbe poter fare con window.openDialog(), oppure cambiare il cursore in una clessidra: come dicevo, in alcuni casi lo switch off nelle mie prove impiegava qualche secondo, e gli allegati visibili solo al termine, quindi si dovrebbe evitare che l'utente legga il messaggio, specialmente se breve, e passi ad un altro prima che lo script venga eseguito del tutto; se non ti dispiace, potresti impacchettarne due versioni, una con la sola modifica qui sopra, se vuoi provarla, ovviamente, e una con in più l'avviso per l'utente, così vedo se nel primo caso cambia qualcosa nella velocità di aggiornamento, anche se in ogni caso la versione definitiva dovrebbe essere quella con l'avviso, per sicurezza - io non so proprio dove mettere le mani per creare un installer, altrimenti qualche prova la farei da me :P).

Alla prossima ;)


Edit: piccole correzioni al codice.
« Ultima modifica: 02 Maggio 2008 20:58:47 da xeal »

Offline guia78

  • Post: 166
    • Blog d'informatica e altro ancora
Re: Allegati firmati digitalmente .P7M
« Risposta #275 il: 05 Maggio 2008 08:27:41 »
Buon 3-4-5 maggio...  :lol:
La versione 0.3.1 aggiunge questa parte di codice con l'integrazione della clessidra durante lo switch?

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Allegati firmati digitalmente .P7M
« Risposta #276 il: 05 Maggio 2008 10:02:32 »
@guia78: no, la versione 0.3.1 ha solo delle ottimizzazioni del codice, in altre parole dovrebbe ridurre al minimo le operazioni, effettuandole solo quando sono necessarie.
Dato che tu in pratica hai solo a che fare con gli allegati p7m e non con i messaggi criptati, non dovresti accorgerti assolutamente di nulla :-)

@xael: ti ringrazio per il contributo, lo terrò presente, purtroppo col tempo che ho già faccio fatica a stare dietro ai codici che scrivo io... Impacchettare estensioni è estremamente facile (se ci sono riuscito io... :-)), se vuoi fare delle prove dai un'occhiata qui:
http://developer.mozilla.org/en/docs/Extensions

Per quanto riguarda la velocità dello switch io non ho mai avuto lentezze così grandi da dover richiedere una clessidra o un avviso, forse può succedere su account IMAP lenti.

Circa il mimetype "application/pkcs7", vorrei capire una cosa: se non sbaglio Dike è un programma di gestione delle firme digitali. Ciò stante, come può essere prodotto e spedito un messaggio che ha come content-type primario "application/pkcs7"?

Offline xeal

  • Post: 21
Re: Allegati firmati digitalmente .P7M
« Risposta #277 il: 07 Maggio 2008 16:25:03 »
In questi giorni sono stato preso da questioni un po' delicate...

Allora... ho appena fatto un piccolo test con l'ultima versione, e ho notato un comportamento un po' strano: a parte il ritardo nell'intervento (come prima), passando un po' rapidamente da un messaggio all'altro si è stranamente attivata su un messaggio cifrato, ricaricandolo e presentandolo come un messaggio vuoto con un allegato... successivamente (chiudendo e riaprendo tb) non si è ripresentato, ma resta comunque strano... e si è ripetuto dopo l'aggiornamento a tb 2.0.0.14. Ho il sospetto che, trattandosi di un meccanismo asincrono, possano verificarsi chiamate non volute alla funzione di switch che alterano il comportamento voluto (potrebbe intervenire, a complicare le cose, anche il meccanismo di caching dei messaggi già letti). Forse sarebbe opportuno modificare la funzione onStopRequest per verificare, dal context o dallo status code, se è il caso di continuare o meno con l'operazione; inoltre, potrebbe essere utile anche creare una sola volta lo stream listener e usare la funzione onStartRequest per sospendere le operazioni in corso nel caso in cui venga chiamata prima della onStopRequest (ma dubito che succeda, però non si sa mai).

Quanto alla lentezza: faccio le mie prove su un account con email.it, e noto lentezze solo nel caso in cui il primo messaggio aperto dopo il collegamento è quello cifrato: in realtà, a questo punto non ci sono lentezze, perchè tb mi chiede di inserire la password del dispositivo di sicurezza, quindi durante la digitazione avviene l'intera elaborazione dell'estensione (azz, la rima...) e la richiesta di reload del messaggio, quando passo ad uno con allegato deve invece eseguire la disabilitazione del supporto interno e il reload, e qui noto il cambiamento. Se invece, all'apertura di tb, seleziono subito un messaggio con allegato p7m, allora la visualizzazione è immediatamente corretta, perchè la tua estensione viene eseguita al caricamento di tb (per via dell'istruzione: "window.addEventListener("load", pkcs7SupportLoad, true);"), quindi il supporto interno risulta immediatamente disabilitato; però ho notato anche che dopo qualche secondo il messaggio viene ricaricato (vedo apparire per un istante la progress bar). Potresti provare a guardare un messaggio con allegato per una decina di secondi per vedere se si presenta il "sintomo" del reload, se non succede magari è perchè il tuo processore è più veloce del mio (un vecchio "thorello" - xp 2400+ - ma nelle PA mi aspetto di trovare macchine anche più vecchie) :P

Per il discorso su dike, provo a spiegare un po' meglio cos'è successo. Quando ho disinstallato dike il sistema operativo continuava a riconoscere i .p7m come dei "pkcs #7", e questo mi sembra coerente con il supporto parziale di windows a smime e ai certificati, legato a IE, ma non forniva un'applicazione associata al file e lo presentava con un'icona generica. In questa "fase" tb riconosceva i file come dei generici octet-stream, e addirittura cambiando l'estensione a un pdf in .p7m, questo veniva presentato proprio come un pdf; scaricando le mail in locale e modificando il content-type si manifestava il bug (il tutto senza la tua estensione). A questo punto ho reinstallato dike: file riconosciuti dal s.o. come prima, ma con l'icona di dike e associati a dike; faccio delle prove d'invio, ed ecco che il file viene allegato come un "application/pkcs7", e trattato da tb praticamente come un octet-stream, quindi reso disponibile per il download, senza però più riconoscere i pdf con estensione fittizia. Francamente non so dare una spiegazione certa al "problema", non so dire con esattezza cosa possa essere successo, però ho riscontrato la possibilità che venga creato un mime-type errato per un certo tipo di file, e tanto mi basta a pensare che si dovrebbe prendere in considerazione per rendere il programma più robusto (dato che, oltretutto, dovrebbe bastare registrare il mime-type con il gestore corretto dei pkcs7-mime).

Un ultima nota sulla licenza: se non ricordo male c'erano dei problemi di compatibilità tra la MPL e la GPL, per cui potrebbe non essere troppo "ortodosso" porre sotto gpl del codice verrà usato da altro codice sotto mpl. Magari la LGPL risolverebbe il problema alla radice (oppure, al limite, aggiungere delle eccezioni alla gpl per renderla compatibile con la mpl, o, meglio, introdurre la doppia licenza, mpl e gpl).

Offline xeal

  • Post: 21
Re: Allegati firmati digitalmente .P7M
« Risposta #278 il: 07 Maggio 2008 17:54:08 »
Altra cosa: ho notato che nell'handler pkcs7ON alll'oggetto nsMyComponentModule manca il metodo unregisterself.

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Allegati firmati digitalmente .P7M
« Risposta #279 il: 08 Maggio 2008 10:04:44 »
@xeal: ti risponderò privatamente per mail, magari evitiamo questi post unicamente "tecnici" che credo risultino completamente illeggibili per molti utenti.

Offline xeal

  • Post: 21
Re: Allegati firmati digitalmente .P7M
« Risposta #280 il: 09 Maggio 2008 20:25:40 »
@klades
Forse sono vicino a una soluzione. Ti mando un'email.

Offline guia78

  • Post: 166
    • Blog d'informatica e altro ancora
Re: Allegati firmati digitalmente .P7M
« Risposta #281 il: 22 Maggio 2008 12:53:14 »
Con la versione 0.4 è stata risolta nella la cosa? Mi sono nuovamente perso!

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Allegati firmati digitalmente .P7M
« Risposta #282 il: 22 Maggio 2008 13:26:19 »
Con la versione 0.4 è stata risolta nella la cosa? Mi sono nuovamente perso!

La versione 0.3 funzionava bene, la 0.4 meglio ;-)
Del resto non ti preoccupare, sono questioni tecniche, che non hanno ripercussioni sul normale utilizzo.

Offline glscarpa

  • Post: 3
Re: Allegati firmati digitalmente .P7M
« Risposta #283 il: 30 Giugno 2008 19:53:20 »
Con la versione 0.4 è stata risolta nella la cosa? Mi sono nuovamente perso!

La versione 0.3 funzionava bene, la 0.4 meglio ;-)
Del resto non ti preoccupare, sono questioni tecniche, che non hanno ripercussioni sul normale utilizzo.

Ciao mi sono collegato oggi perchè mi si è presentato lo stesso problema ed ho visto la discussione. Se ho capito bene siete riusciti a risolvere il problema con una estensione, ma non ho capito dove è possibile trovarla.
Mi puoi dare l'indirizzo completo.
Grazie
« Ultima modifica: 30 Giugno 2008 20:03:12 da glscarpa »

Offline klades

  • Moderatore
  • Post: 5788
    • http://www.nic-nac-project.org/~kaosmos
Re: Allegati firmati digitalmente .P7M
« Risposta #284 il: 30 Giugno 2008 20:51:12 »
Visto che il sito ufficiale è al momento down, la puoi scaricare da qui:
http://www.extenzilla.org/scheda_estensione.php?id=791

0 Utenti e 1 Visitatore stanno visualizzando questo topic.