La firma digitale italiana e l’open source [extract-p7m.pl: estrazione file firmati .p7m]

Scrivo delle incongruenze che riscontro tra la gestione della firma digitale e il codice dell’amministrazione digitale. Ricordo che nel codice dell’amministrazione digitale si parla di una preferenza per i software open source e di riuso del software. Invece tutti i software esistenti per la gestione della firma digitale sono tutti closed source e usano (sfruttano) librerie come openssl e qt per esempio che invece sono open source.

http://www.digitpa.gov.it/principali-attivit%C3%A0/riuso-del-software

I software naturalmente sono sviluppati da aziende italiane che offrono versioni limitate per uso personale gratuite (non open source naturalmente) e versioni più avanzate a pagamento. A questo proposito mi chiedo, se la firma digitale deve essere usata nelle pubbliche amministrazioni, come fa la DigiPA a consigliare per le pubbliche amministazioni un software gratuito, ma solo per uso personale, se nelle pubbliche amministrazioni l’uso non è personale? BOH!

I software di cui sto parlando sono:

  • Comped DigitalSign
  • Postecom Firma OK
  • Digitaltrust Sign’ncryptil
  • Intesi Group PkNet
  • Infocert DIKE
  • Primeur Security Service DSTK

tra l’altro consigliati dalla DigitPA che dovrebbe essere promotrice del software open source e del riuso del software.  Poi la DigitPA specifica che è possibile segnalare nuovi software all’indirizzo pec cnipadir@cert.cnipa.it, e il bello è che specifica che devono essere gratuiti “per uso personale”, non gratuiti e basta, o open source.
Inoltre sempre per incentivare l’uso di sistemi operativi open source, pochi sono multipiattaforma.

Spinto da questo spirito tutto italiano, ho deciso di sviluppare qualcosa che segua le linee guida del codice dell’amministrazione digitale: del software open source per la firma digitale.
Per cominciare ho sviluppato un semplice script perl che con openssl estrae i documenti originali da quelli firmati con estensione .p7m presenti in una cartella, quindi non uno per volta come fanno i programmi consigliati dalla DigitPA.
Lo script l’ho messo in un progetto su google code a questo indirizzo:

http://extract-p7m.googlecode.com/svn/trunk/extract-p7m.pl

le istruzioni sono qui
http://extract-p7m.googlecode.com/svn/trunk/doc/readme.it.txt

questo è uno zip con script e istruzioni
http://extract-p7m.googlecode.com/files/extract-p7m-0.1.0.zip

Il progetto si chiama extract-p7m:
http://code.google.com/p/extract-p7m/

Lo script utilizza il comando openssl come consigliato da Luca Regoli nel suo post Firma digitale: come si estrae il contenuto di un file firmato dal suo involucro P7M?

openssl.exe smime -verify -inform DER -in “pippo.tif.p7m” -noverify -out “pippo.tif”

Ho creato un altro script per i pdf che ho messo su hotfile:
http://hotfile.com/dl/131105572/d279f2a/extract-pdf-p7m.pl.html
questo ha bisogno solo del Perl ma non effettua nessuna verifica e funziona solo per i file pdf (i file possono avere un numero qualsiasi di livelli di firma, l’importante che abbiano l’estensione .pdf.p7m)

Per ora c’è solo questo script, ma penso di creare una interfaccia grafica in pygtk (multipiattaforma) che consenta di aprire più file in contemporanea, vederne le informazioni e farne la verifica ed estrarne il contenuto (uno o più file contemporaneamente).

10/10/2011: ho cominciato a sviluppare l’interfaccia grafica in pygtk, l’indirizzo su google code è questo:

http://code.google.com/p/si-e-na/

si-e-na sta per Si.E.Na: signature extractor and navigator.

12 pensieri su “La firma digitale italiana e l’open source [extract-p7m.pl: estrazione file firmati .p7m]

  1. alessio

    complimenti per lo script, l’ho provato su un rtf e funziona correttamente!
    l’unica cosa che ho trovato è che non gestisce le estensioni in caratteri maiuscoli (es:P7M) ma rinominando o utilizzando sed si fa tutto.

    Rispondi
  2. alessio

    ho cambiato l’if in case, per gestire tutte le 4 estensioni possibili non è molto elegante ma funziona.

    — /tmp/firmato/extract-p7m-case.pl 2012-03-09 16:36:12.211000999 +0100
    +++ extract-p7m.pl 2012-03-09 16:43:57.673308861 +0100
    @@ -18,7 +18,6 @@

    use strict;
    use warnings;
    -use Switch ‘fallthrough’;

    ##COSTANTI/PARAMETRI
    my $OPENSSL_COMMAND = “openssl”;
    @@ -31,22 +30,10 @@

    while (my $file = readdir($current_dir)) {
    my $estensione = substr ($file,-4,4);
    – switch ( $estensione ) {
    – case ‘.p7m’ {
    + if ($estensione eq ‘.p7m’) {
    openssl_decrypt_file($file);
    }
    – case ‘.P7M’ {
    – openssl_decrypt_file($file);
    – }
    – case ‘.P7m’ {
    – openssl_decrypt_file($file);
    – }
    – case ‘.p7M’ {
    – openssl_decrypt_file($file);
    – }
    – }

    – }
    + }

    closedir $current_dir;
    }
    @@ -94,3 +81,4 @@
    print “+——————————————————-+\n\n”;
    }

    +

    Rispondi
  3. jumpjack

    ciao, ho un file pdf firmato contenuto in un file TSD che non riesco più a leggere, dici che il tuo programma potrebbe riuscirci? Non so niente di perl, ma so programmare in vari altri linguaggi (C, php, python,…)

    Rispondi
  4. Anonimo

    Ciao, complimenti per il post, molto interessante!
    Data la nuova normativa, che prevede l’utilizzo del cades per firmare i documenti, è possibile creare i p7m con openssl ? oppure è solo possibile estrarli?

    Rispondi
  5. Anonimo

    Ho provato lo script: complimenti!
    Proprio quello che cercavo, uno script che “smontasse” il documento per poterlo vedere nel browser!

    Rispondi
  6. Stefano Sanfilippo

    Ciao, con un po’ di ritardo, ti segnalo che Seahorse è in grado di estrarre i certificati e verificare le firme. Il tutto è piacevolmente integrato con il file manager: basta un doppio click sul file. Hanno fatto un ottimo lavoro🙂

    Rispondi
  7. Giuliano "Wallace" Tiso

    Questo è ancora più semplice:
    #! /bin/bash

    #==========================================================================
    # script per estrarre un file firmato digitalmente
    #==========================================================================

    #——————————————————————————
    # verifica che il numero di parametri passati sia corretti
    #——————————————————————————
    if [ ! $# -eq 2 ] ; then
    echo ‘Usage: p7mext [infile] [outfile]’
    exit 0
    fi

    #——————————————————————————
    # verifica che il file indicato dal parametro 1 esista
    #——————————————————————————
    if [ ! -e $1 ] ; then
    echo ‘Non existent file’ $1 ‘!’
    echo ‘Usage: p7mext [infile] [outfile]’
    exit 0
    fi

    #——————————————————————————
    # verifica che il file indicato dal parametro 2 NON esista
    #——————————————————————————
    if [ -e $2 ] ; then
    echo ‘Cannot overwrite file’ $2 ‘!’
    echo ‘Usage: p7mext [infile] [outfile]’
    exit 0
    fi

    openssl smime -decrypt -verify -inform DER -in $1 -noverify -out $2

    Rispondi
  8. Federico Munerotto

    Grazie il comando
    openssl smime -verify -inform DER -in “ITVRCFRZ75S19H501Q_00086.xml.p7m” -noverify -out “ITVRCFRZ75S19H501Q_00086.xml”
    mi ha semplificato molto le cose: per togliere l’incapsulamento stavo per ricorrere a head e tail.
    Adesso mi facccio un piccolo script per farlo su tutti i file *.xml.p7m.

    Rispondi

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...