Categorie
Informatica

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.

14 risposte su “La firma digitale italiana e l'open source [extract-p7m.pl: estrazione file firmati .p7m]”

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.

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”;
}
+

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,…)

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?

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

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 🙂

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

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.

Ciao Nicola. I link di questo vecchio post non sono più disponibili. Puoi mandarmi direttamente il materiale?

ciao,
mi scuso in anticipo se dico una castroneria, non essendo del settore.
Essendo un utente che riceve ed invia continuamente file firmati digitalmente lavorando nel settore appalti pubblici, mi chiedevo è possibile o meno sviluppare una seria APP per Android e IOS per la lettura e conversione di questi? gli app store ne sono privi.
Nessuno di voi del settore che abbia voglia di cimentarsi in questa esperienza? la pagherei anche volentieri se ben fatta.

grazie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *