Salta ai contenuti

Firmare un PDF con una firma PAdES baseline (ricetta spostata)

La procedura dettagliata di firma contenuta in precedenza in questa pagina è stata sostituita. Usare al suo posto la ricetta canonica:

Firmare un PDF con PAdES B-B, quindi estendere a PAdES B-T

Perché questa pagina è cambiata (errata corrige)

Sezione intitolata “Perché questa pagina è cambiata (errata corrige)”

Una versione precedente di questa pagina affermava che il punto di ingresso di alto livello Document::setSignature()save() non era collegato e che generava NotImplementedException. Questo non è più vero. Il punto di ingresso di alto livello ora produce una firma reale.

Document::setSignature($cert, SignatureLevel::PAdES_B_B)->save() (e gli equivalenti output() / getPdfData()) scrive un campo /Sig con un /ByteRange e, nella voce Contents del dizionario della firma, un oggetto CMS SignedData codificato in DER: la struttura che ISO 32000-2 §12.8 specifica per il SubFilter ETSI.CAdES.detached. Il risultato è verificabile come CMS: un verificatore CMS/PKCS#7 standard può analizzarlo e verificarlo.

  • B-B — il livello Core — viene prodotto direttamente tramite questo punto di ingresso.
  • B-T aggiunge una marca temporale RFC 3161 signature-time-stamp passando un TsaClient nella stessa chiamata.
  • B-LT / B-LTA sono raggiungibili tramite lo stesso punto di ingresso di alto livello (setSignature($cert, SignatureLevel::PAdES_B_LTA, $tsaClient)->save()) quando sono installati i pacchetti Pro e Enterprise; in loro assenza la chiamata fallisce in modo sicuro (fail-closed) anziché scrivere una revisione a lungo termine parziale. Anche per i documenti cifrati l’operazione fallisce in modo sicuro (fail-closed) per B-LT/B-LTA.

Il percorso di livello inferiore NextPDF\Security\Signature\DigitalSigner è ancora supportato ed è quello illustrato dall’inizio alla fine nella ricetta canonica; il punto di ingresso di alto livello è un livello di comodità sottile sopra lo stesso motore di firma. La suite di integrazione copre entrambi i percorsi e produce un oggetto CMS reale e analizzabile.

Avvertenza U-1 (ambito dell’affermazione). «verificabile come CMS» significa che l’oggetto generato è un CMS SignedData ben formato secondo RFC 5652 e ISO 32000-2 §12.8 — non costituisce un’attestazione di conformità al profilo baseline ETSI EN 319 142-1, né di validità legale. La sezione di tale standard relativa ai livelli baseline non è presente nel corpus di verifica; il requisito B-T di signature-time-stamp è stato verificato rispetto a ETSI EN 319 122-1 §5.3 con RFC 3161, RFC 5652, RFC 5816 e ISO 32000-2 §12.8. B-LT/B-LTA generano la struttura di convalida a lungo termine (un dizionario DSS più una revisione DocTimeStamp); non sono dichiarati come testati per la conformità al profilo. La determinazione della conformità e della validità legale spetta a un validatore indipendente.

I fatti strutturali che la vecchia pagina affermava sull’artefatto scritto su disco restano corretti. La ricetta sostitutiva li riprende, insieme alle relative evidenze:

  • Il valore della firma è memorizzato nella voce Contents del dizionario della firma (ISO 32000-2 §12.8.1).
  • Il digest è calcolato sul ByteRange ed esclude il valore stesso della firma (ISO 32000-2 §12.8.1).

Questa pagina non afferma che una qualsiasi firma risultante sia legalmente valida. Ciò dipende dal certificato, dalla sua ancora di fiducia e dai criteri del verificatore, tutti elementi che esulano da questa libreria.