Questa pagina può contenere testo tradotto automaticamente.

Aggiungi informazioni di convalida a lungo termine (PAdES-LTV) alle firme PDF in C# e VB.NET

Le informazioni di convalida a lungo termine (LTV) per le firme PDF aiutano a verificare le firme digitali molto tempo dopo la loro creazione. Senza LTV, una firma digitale diventa non verificabile quando il certificato del firmatario scade o i dati di revoca non sono più disponibili. Questo è spesso inaccettabile per documenti PDF legali e finanziari che devono rimanere affidabili per anni.

Convalida a lungo termine (LTV)

Questo articolo è composto da due parti: teorica e pratica. Prima, apprenderai le informazioni di base sulle firme PAdES-LTV. Poi, vedrai come aggiungere informazioni LTV alle firme PDF in C# usando la libreria Docotic.Pdf. Puoi ottenere la libreria e una chiave di licenza gratuita a tempo limitato sulla pagina Scarica la libreria PDF C# .NET.

PAdES - Firme elettroniche avanzate PDF

L'European Telecommunications Standards Institute (ETSI) ha pubblicato diversi standard per le firme elettroniche. In particolare, l'Istituto definisce lo standard PDF Advanced Electronic Signature (PAdES) nella specifica ETSI EN 319 142. PAdES descrive come rendere le firme PDF conformi alle normative eIDAS europee.

Il concetto fondamentale delle firme LTV consiste nell'incorporare in un PDF informazioni correlate alla convalida (VRI). Queste informazioni rendono possibile convalidare le firme PDF dopo molto tempo, anche quando l'ambiente di firma non è più disponibile.

La specifica ETSI EN 319 142-1 definisce quattro livelli di firme baseline PAdES: B-B, B-T, B-LT e B-LTA. In questo articolo, mi concentrerò sui livelli B-LT e B-LTA, in quanto sono correlati a firme abilitate per LTV nei PDF.

PAdES-B-B

Le firme digitali PDF a breve termine nel formato ETSI.CAdES.detached corrispondono a questo livello. L'articolo Firma documenti PDF in C# e VB.NET spiega come creare tali firme.

PAdES-B-T

Le firme B-T devono soddisfare i requisiti del livello B-B e anche includere un timestamp.

PAdES-B-LT

Le firme B-LT devono essere conformi al livello B-T. Inoltre, un file PDF deve includere il dizionario Document Security Store (DSS) con i seguenti dati:

  • Tutti i certificati nella catena di fiducia
  • Risposte del Online Certificate Status Protocol (OCSP)
  • Certificate Revocation Lists (CRLs)

Le firme elettroniche avanzate corrispondono a questo livello.

PAdES-B-LTA

Le firme B-LTA devono essere conformi al livello B-LT. Inoltre, un file PDF deve includere una firma con timestamp del documento e VRI per il certificato del timestamp del documento.

Le firme elettroniche qualificate corrispondono a questo livello.

Convalida PAdES

Un'opzione consiste nell'usare Adobe Acrobat Pro o Adobe Reader. Apri il pannello Firme ed espandi una firma digitale per verificarne lo stato. Se la firma è valida, vedrai "La firma ha LTV abilitato" oppure "La firma non ha LTV abilitato e scadrà dopo".

La firma ha LTV abilitato in Adobe Reader

Un'altra opzione consiste nell'usare il validatore PAdES della Commissione europea. Questo metodo funziona meglio quando si convalidano documenti conformi a EU (eIDAS).

Esiste anche il Signatures Conformance Checker di ETSI. Questo servizio è progettato principalmente per sviluppatori che lavorano su strumenti di firma o convalida.

Tieni presente che questi validatori possono fornire risultati diversi per lo stesso documento PDF.

Le parole contano poco. Mostrami il codice.

Crea firme PDF abilitate per LTV in C# e VB.NET

È il momento di scrivere del codice! Docotic.Pdf fornisce i metodi PdfDocument.AddLtvInfo per aggiungere informazioni LTV alle firme PDF. Per produrre firme B-LTA, avrai anche bisogno dei metodi PdfDocument.TimestampAndSave per salvare i PDF con firme con timestamp del documento.

Come creare firme PAdES-B-LT in C#

Il processo di creazione delle firme B-LT consiste in tre passaggi:

  1. Crea una firma B-T e salva il documento.
  2. Apri il documento firmato e aggiungi informazioni LTV.
  3. Salva il documento finale in modo incrementale.

Ecco il codice C# per creare firme B-LT. Puoi anche scaricare il progetto di esempio completo Crea firme PDF abilitate per LTV da GitHub:

// 1. Crea una firma PAdES-B-T
using var step1 = new MemoryStream();
using (var pdf = new PdfDocument())
{
    var options = new PdfSigningOptions(..)
    {
        DigestAlgorithm = PdfDigestAlgorithm.Sha256,
        Format = PdfSignatureFormat.CadesDetached,
    };
    options.Timestamp.AuthorityUrl = new Uri("http://timestamp.digicert.com");

    pdf.SignAndSave(options, step1);
}

// 2. Apri il documento firmato e aggiungi informazioni LTV
using (var pdf = new PdfDocument(step1))
{
    pdf.AddLtvInfo();

    // 3. Salva il documento finale in modo incrementale
    var incrementalOptions = new PdfSaveOptions()
    {
        WriteIncrementally = true,
    };
    pdf.Save("b-lt.pdf", incrementalOptions);
}

Ci sono alcuni punti chiave da considerare. Prima di tutto, puoi creare PdfSigningOptions usando un certificato PKCS#12 (file .pfx o .p12) oppure un firmatario esterno. Indipendentemente dal metodo, per la conformità PAdES, l'opzione Format deve essere impostata su PdfSignatureFormat.CadesDetached.

Questo frammento di codice usa http://timestamp.digicert.com, ma puoi usare qualsiasi altra autorità di timestamp (TSA). Ecco alcune alternative popolari:

http://timestamp.comodoca.com/rfc3161
http://timestamp.sectigo.com
http://timestamp.entrust.net/TSS/RFC3161sha2TS
http://rfc3161timestamp.globalsign.com/advanced

Per essere conformi alle specifiche ETSI, dovresti usare una TSA approvata da eIDAS. Puoi sceglierne una usando il Browser degli elenchi di fiducia UE/SEE.

Salvare il documento intermedio dopo il primo passaggio è obbligatorio. Devi firmare e salvare il documento prima di aggiungere informazioni LTV. Tuttavia, esiste un'eccezione a questa regola, che spiego più sotto nella sezione Certifica PDF con LTV.

La riga WriteIncrementally = true nel terzo passaggio abilita il salvataggio incrementale. Gli aggiornamenti incrementali non invalidano le firme digitali. Dovresti sempre salvare i file PDF in modo incrementale quando aggiungi informazioni LTV.

Come creare firme PAdES-B-LTA in C#

Generare firme B-LTA è simile, tranne che per il terzo passaggio. Devi:

  1. Crea una firma B-T e salva il documento.
  2. Apri il documento firmato e aggiungi informazioni LTV.
  3. Salva il documento finale in modo incrementale con una firma con timestamp del documento.

Questo esempio di codice mostra come creare firme B-LTA in C#:

var timestampAuthorityUrl = new Uri("http://timestamp.digicert.com");

// 1. Crea una firma PAdES-B-T
using var step1 = new MemoryStream();
using (var pdf = new PdfDocument())
{
    var options = new PdfSigningOptions(..)
    {
        DigestAlgorithm = PdfDigestAlgorithm.Sha256,
        Format = PdfSignatureFormat.CadesDetached,
    };
    options.Timestamp.AuthorityUrl = timestampAuthorityUrl;

    pdf.SignAndSave(options, step1);
}

// 2. Apri il documento firmato e aggiungi informazioni LTV
using (var pdf = new PdfDocument(step1))
{
    pdf.AddLtvInfo();

    // 3. Salva il documento finale in modo incrementale con una firma con timestamp del documento
    var timestampOptions = new PdfSignatureTimestampOptions
    {
        AuthorityUrl = timestampAuthorityUrl,
    };
    var incrementalOptions = new PdfSaveOptions()
    {
        WriteIncrementally = true,
    };
    pdf.TimestampAndSave(timestampOptions, "b-lta.pdf", incrementalOptions);
}

Il documento finale b-lta.pdf contiene due firme: la firma principale del primo passaggio e la firma con timestamp del documento del terzo passaggio. Potresti notare che Adobe Acrobat visualizza il messaggio "La firma ha LTV abilitato" per entrambe le firme. Com'è possibile che la firma con timestamp del documento sia abilitata per LTV anche se è stata creata dopo la chiamata AddLtvInfo?

La chiave è usare la stessa TSA sia per il timestamp della firma sia per il timestamp del documento. Il metodo AddLtvInfo aggiunge VRI per il certificato del timestamp. Il timestamp del documento usa quindi lo stesso certificato e riutilizza i dati associati.

Non puoi usare la stessa TSA per il timestamp del documento? Esaminerò questo caso nella sezione Conversione da PAdES-B-T a B-LTA.

Aggiungi informazioni LTV alle firme PDF esistenti in C# e VB.NET

Finora, ho creato firme abilitate per LTV da zero. Tuttavia, spesso è necessario modificare firme PAdES-B-T esistenti. Ad esempio, per convertirle in B-LT o B-LTA, oppure per aggiornare le informazioni LTV.

Come negli esempi precedenti, devi:

  1. Apri il documento firmato e aggiungi informazioni LTV.
  2. Salva il documento finale in modo incrementale, con o senza una firma con timestamp del documento.

Ecco i corrispondenti frammenti di codice.

Come convertire le firme PAdES-B-T in B-LT in C#

using var pdf = new PdfDocument("b-t.pdf");
pdf.AddLtvInfo();

var incrementalOptions = new PdfSaveOptions()
{
    WriteIncrementally = true,
};
pdf.Save("b-lt.pdf", incrementalOptions);

Come convertire le firme PAdES-B-T in B-LTA in C#

using var pdf = new PdfDocument("b-t.pdf");
pdf.AddLtvInfo();

var timestampOptions = new PdfSignatureTimestampOptions
{
    AuthorityUrl = new Uri("http://timestamp.digicert.com"),
};
var incrementalOptions = new PdfSaveOptions()
{
    WriteIncrementally = true,
};
pdf.TimestampAndSave(timestampOptions, "b-lta.pdf", incrementalOptions);

Scarica il progetto di esempio completo Aggiungi informazioni LTV alle firme esistenti su GitHub.

Aggiungi informazioni LTV a una firma con timestamp del documento

Le firme B-T esistenti potrebbero usare una TSA arbitraria diversa da quella usata in questo esempio. In questi casi, Adobe Acrobat visualizzerà il messaggio "La firma non ha LTV abilitato" per la firma con timestamp del documento.

Come puoi abilitarla per LTV? Devi aggiungere informazioni LTV alla firma con timestamp del documento:

var timestampOptions = new PdfSignatureTimestampOptions
{
    AuthorityUrl = new Uri("http://timestamp.digicert.com"),
};
var incrementalOptions = new PdfSaveOptions()
{
    WriteIncrementally = true,
};

using var intermediate = new MemoryStream();
using (var pdf = new PdfDocument("b-t.pdf"))
{
    pdf.AddLtvInfo();
    pdf.TimestampAndSave(timestampOptions, intermediate, incrementalOptions);
}

// Aggiungi informazioni LTV alla firma con timestamp del documento
using (var pdf = new PdfDocument(intermediate))
{
    pdf.AddLtvInfo();
    pdf.TimestampAndSave(timestampOptions, "b-lta.pdf", incrementalOptions);
}

Certifica PDF con LTV in C# e VB.NET

Le firme digitali nei documenti PDF certificati non consentono modifiche. Le applicazioni di lettura PDF visualizzano tali firme con un'icona speciale e una didascalia che inizia con "Certified by".

Firma PDF certificata visualizzata in Adobe Acrobat

Qualsiasi modifica a un PDF certificato invaliderà la firma, il che significa che non puoi aggiungere informazioni LTV senza compromettere la certificazione.

Docotic.Pdf offre la possibilità di generare documenti PDF certificati con informazioni LTV. Usa l'overload AddLtvInfo(PdfSigningOptions) per aggiungere informazioni LTV durante la firma. Questo esempio di codice mostra come certificare PDF con una firma B-LT in C#:

using var pdf = new PdfDocument();

var options = new PdfSigningOptions(..)
{
    DigestAlgorithm = PdfDigestAlgorithm.Sha256,
    Format = PdfSignatureFormat.CadesDetached,
    Type = PdfSignatureType.AuthorNoChanges,
};
options.Timestamp.AuthorityUrl = new Uri("http://timestamp.digicert.com");

pdf.AddLtvInfo(options);

pdf.SignAndSave(options, "certified-b-lt.pdf");

Esplora l'esempio di codice Certifica PDF con firme LTV su GitHub.

A giugno 2025, Adobe Acrobat supporta i documenti PDF certificati con firme B-LT ma considera non valide le firme B-LTA nei documenti certificati.

Conclusione

Puoi aggiungere informazioni di convalida a lungo termine (LTV) alle firme PDF per garantire la conformità legale e la fiducia a lungo termine. Lo standard PAdES definisce regole e livelli di conformità per le firme PDF.

Si consiglia di firmare almeno con firme PAdES-B-T. Le firme B-T possono essere convertite in Firme elettroniche avanzate (B-LT) o Firme elettroniche qualificate (B-LTA) senza compromettere le convalide esistenti.

Usa la libreria Docotic.Pdf per aggiungere informazioni LTV alle firme PDF nelle applicazioni .NET. Puoi anche certificare documenti PDF con LTV.

Esplora i campioni di codice per le firme digitali in PDF su GitHub. Consulta gli articoli correlati per ulteriori informazioni:

Domande frequenti

Come faccio a evitare il messaggio "La validità della firma è sconosciuta" in Adobe Acrobat?

Adobe Acrobat visualizza l'avviso "La validità della firma è sconosciuta" quando non riesce a verificare il certificato del firmatario. Questo accade di solito quando il certificato manca, non è attendibile, è autofirmato, revocato, scaduto o non ancora attivo.

Ottieni il certificato corretto per evitare l'avviso oppure crea documenti conformi a EU (eIDAS).

In alternativa, puoi aggiungere manualmente i certificati a "Trusted Certificates" in Adobe Acrobat. Questa opzione è disponibile in: Menu > Preferences > Signatures > Identities & Trusted Certificates.

Se devi considerare attendibile un certificato per documenti certificati, assicurati di concedere l'autorizzazione corrispondente:

Configurazione delle impostazioni di attendibilità in Adobe Acrobat

Come verifico se una firma PDF è abilitata per LTV?

Puoi usare Adobe Reader o il validatore PAdES della Commissione europea. Consulta la sezione Convalida PAdES per maggiori dettagli.

Perché Adobe Acrobat visualizza "La firma non ha LTV abilitato"?

Adobe Acrobat verifica le informazioni di revoca come parte del processo di convalida della firma. Se deve scaricare dei dati, la firma corrispondente non è abilitata per LTV.

Come faccio a rendere una firma PDF conforme alle specifiche ETSI?

Segui i requisiti per le Firme elettroniche avanzate PDF. Devi usare certificati emessi da provider elencati negli Elenchi di fiducia dell'Unione europea (EUTL).

Come ottengo l'indicatore "La firma ha LTV abilitato" in Adobe Reader?

Prima di tutto, la firma deve essere conforme almeno al livello PAdES-B-T. Poi, devi aggiungere informazioni LTV, inclusi tutti i certificati nella catena di fiducia, OCSP risposte e CRLs .

Le sezioni Crea firma PDF abilitata per LTV e Aggiungi informazioni LTV alle firme PDF esistenti spiegano come aggiungere informazioni LTV in C# e VB.NET.

Come abilito LTV per una firma con timestamp del documento?

Il processo è simile alle normali firme PDF. Devi aggiungere informazioni LTV per la firma con timestamp del documento al DSS dizionario.

Fai riferimento all'esempio di codice nella sezione Aggiungi informazioni LTV a una firma con timestamp del documento.

È possibile eseguire LTV e timestamp nella stessa operazione?

Sì! Consulta l'esempio di codice nella sezione Come convertire le firme PAdES-B-T in B-LTA.

Come creo una firma digitale con LTV in C#?

Usa la libreria Docotic.Pdf. Per produrre Firme elettroniche avanzate, guarda gli esempi di codice nella sezione Come creare firme PAdES-B-LT. Per creare Firme elettroniche qualificate, consulta la sezione Come creare firme PAdES-B-LTA.

Come abilito LTV per una firma quando "non sono consentite modifiche"?

Per i documenti certificati, Adobe Acrobat richiede che tutti i dati LTV siano inclusi nel documento firmato originale. Leggi la sezione Certifica PDF con LTV per maggiori dettagli.

Come abilito la convalida a lungo termine (LTV) quando firmo documenti PDF esternamente?

Usa la libreria Docotic.Pdf per firmare documenti PDF con LTV usando token USB, smart card o HSM basati su cloud. Consulta l'articolo Come firmare PDF con token USB e dispositivi HSM in C# e VB.NET e la sezione Come creare firme PAdES-B-LT.

Come firmo un PDF con più firme e abilito LTV?

Combina gli esempi di codice Firma un modulo PDF da più persone e Aggiungi informazioni LTV alle firme esistenti.