Se si tenta di verificare la firma di un file p7m senza il certificato dell'ente certificatore (la CA), la verifica fallisce ("unable to load certificate") perché non abbiamo i certificati di fiducia della CA (i cosiddetti Trust).
Tali Certificate Authority sono state definite per legge italiana e sono registrati sul CNIPA, che dal dicembre 2009 è diventato DigitPA, come portafoglio di certificati XML e li ho trovati sullo stesso sito all'indirizzo https://applicazioni.cnipa.gov.it/TSL/_IT_TSL_signed.xml.
Per far in modo che openssl li gestisca bisogna metterli nel suo formato quindi:
wget -O - https://applicazioni.cnipa.gov.it/TSL/_IT_TSL_signed.xml | perl -ne 'if (/<X509Certificate>/) {
s/^\s+//; s/\s+$//;
s/<\/*X509Certificate>//g;
print "-----BEGIN CERTIFICATE-----\n";
while (length($_)>64) {
print substr($_,0,64)."\n";
$_=substr($_,64);
}
print $_."\n";
print "-----END CERTIFICATE-----\n";
}' >CA.pem
In tal modo abbiamo tutti i certificati presenti in un unico file CA.pem, purtroppo anche quelli che forse sono scaduti.
Anche se scaduti potremmo aver bisogno di verificare un file vecchio e quindi ci possono servire anche gli scaduti.
Per maggiori informazioni vedere l'articolo