Questa pagina può contenere testo tradotto automaticamente.
Aggiungere 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 la convalida a lungo termine (LTV), una firma digitale diventa non verificabile una volta che il certificato del firmatario scade o i dati di revoca non sono più disponibili. Questo è spesso inaccettabile per i documenti PDF legali e finanziari che devono rimanere affidabili per anni.
Questo articolo si compone di due parti: teorica e pratica. In primo luogo, apprenderai le informazioni di base sulle firme PAdES-LTV. In secondo luogo, esplorerai come aggiungere informazioni di convalida a lungo termine (LTV) alle firme PDF in C# utilizzando la libreria Docotic.Pdf. È possibile ottenere la libreria e una chiave di licenza gratuita a tempo limitato dalla pagina Scarica la libreria PDF C# .NET.
9.7.18373 Ne sono passati 15,244 Download totali di NuGet 5,976,723PAdES - Firme elettroniche avanzate PDF
L'Istituto europeo per gli standard delle telecomunicazioni (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 alla normativa europea eIDAS.
Il concetto fondamentale delle firme LTV prevede l'integrazione di informazioni relative alla convalida (VRI) in un PDF. Queste informazioni consentono di convalidare le firme PDF dopo un lungo periodo di tempo, anche quando l'ambiente di firma non è più disponibile.
La specifica ETSI EN 319 142-1 definisce quattro livelli di firme di base PAdES: B-B, B-T, B-LT e B-LTA. In questo articolo, mi concentrerò sui livelli B-LT e B-LTA, in relazione alle firme abilitate LTV nei PDF.
PAdES-B-B
Le firme PDF digitali 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 includere una marca temporale.
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 attendibilità
- Risposte del protocollo di stato dei certificati online (OCSP)
- Liste di revoca dei certificati (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 marca temporale del documento e VRI per il certificato di marca temporale del documento.
Le firme elettroniche qualificate corrispondono a questo livello.
Convalida PAdES
Un'opzione è utilizzare Adobe Acrobat Pro o Adobe Reader. Apri il pannello Firma ed espandi una firma digitale per verificarne lo stato. Se la firma è valida, vedrai "La firma è abilitata per LTV" o "La firma non è abilitata per LTV e scadrà dopo".
Un'altra opzione è utilizzare il validatore PAdES della Commissione Europea. Questo metodo funziona al meglio quando si convalidano documenti conformi allo standard UE (eIDAS).
È disponibile anche il Verificatore di conformità delle firme dell'ETSI. Questo servizio è progettato principalmente per gli sviluppatori che lavorano su strumenti di firma o convalida.
Tieni presente che questi validatori possono fornire risultati diversi per lo stesso documento PDF.
Creare firme PDF abilitate per LTV in C# e VB.NET
È ora di scrivere del codice! Docotic.Pdf fornisce i metodi PdfDocument.AddLtvInfo per aggiungere informazioni LTV alle firme PDF. Per produrre firme B-LTA, sono necessari anche i metodi PdfDocument.TimestampAndSave per salvare i PDF con firme con marca temporale del documento.
Come creare firme PAdES-B-LT in C#
Il processo di creazione di firme B-LT si compone di tre passaggi:
- Creare una firma B-T e salvare il documento.
- Aprire il documento firmato e aggiungere le informazioni LTV.
- Salvare 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. Aprire il documento firmato e aggiungere le informazioni LTV
using (var pdf = new PdfDocument(step1))
{
pdf.AddLtvInfo();
// 3. Salvare 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. Innanzitutto, puoi creare PdfSigningOptions
utilizzando un certificato PKCS#12 (file .pfx o .p12) o un firmatario esterno.
Indipendentemente dal metodo, per la conformità PAdES, l'opzione Format
deve essere impostata su
PdfSignatureFormat.CadesDetached
.
Questo frammento di codice utilizza http://timestamp.digicert.com
, ma puoi utilizzare qualsiasi
altra autorità di marcatura temporale (TSA). Ecco alcune alternative comuni:
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, è necessario utilizzare una TSA approvata eIDAS. Puoi sceglierne una utilizzando il Browser dell'elenco attendibile UE/SEE.
È obbligatorio salvare il documento intermedio dopo il primo passaggio. È necessario firmare e salvare il documento prima di aggiungere le informazioni LTV. Tuttavia, esiste un'eccezione a questa regola, che spiegherò di seguito nella sezione Certificare PDF con LTV.
La riga WriteIncrementally = true
nel terzo passaggio abilita il salvataggio incrementale. Gli
aggiornamenti incrementali non invalidano le firme digitali. Si consiglia sempre di salvare i file
PDF in modo incrementale quando si aggiungono informazioni LTV.
Come creare firme PAdES-B-LTA in C#
La generazione di firme B-LTA è simile, ad eccezione del terzo passaggio. È necessario:
- Creare una firma B-T e salvare il documento.
- Aprire il documento firmato e aggiungere le informazioni LTV.
- Salvare il documento finale in modo incrementale con una firma con marca temporale.
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. Aprire il documento firmato e aggiungere le informazioni LTV
using (var pdf = new PdfDocument(step1))
{
pdf.AddLtvInfo();
// 3. Salvare il documento finale in modo incrementale con una firma con marca temporale
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 marca temporale del documento del terzo passaggio. Potresti notare che Adobe Acrobat
visualizza il messaggio "Firma abilitata per LTV" per entrambe le firme. Com'è possibile che la
firma con marca temporale del documento sia abilitata per LTV, nonostante sia stata creata dopo la
chiamata AddLtvInfo
?
La chiave è utilizzare lo stesso
TSA
sia per la marca temporale della firma che per quella del documento. Il metodo AddLtvInfo
aggiunge
VRI
per il certificato di marca temporale. La marca temporale del documento utilizza quindi lo stesso
certificato e riutilizza i dati associati.
Non è possibile utilizzare lo stesso TSA per la marca temporale del documento? Esaminerò questo caso nella sezione Conversione da PAdES-B-T a B-LTA.
Aggiungere informazioni LTV a firme PDF esistenti in C# e VB.NET
Finora ho creato firme abilitate per LTV da zero. Tuttavia, spesso è necessario modificare le 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, è necessario:
- Aprire il documento firmato e aggiungere le informazioni LTV.
- Salvare il documento finale in modo incrementale, con o senza firma con marca temporale.
Ecco i frammenti di codice corrispondenti.
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.
Aggiungere informazioni LTV a una firma con marca temporale di un documento
Le firme B-T esistenti potrebbero utilizzare un TSA arbitrario diverso da quello utilizzato in questo esempio. In questi casi, Adobe Acrobat visualizzerà il messaggio "La firma non è abilitata per LTV" per la firma con marca temporale del documento.
Come si può abilitare per LTV? È necessario aggiungere informazioni LTV alla firma con marca temporale 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);
}
// Aggiungere informazioni LTV alla firma con marca temporale del documento
using (var pdf = new PdfDocument(intermediate))
{
pdf.AddLtvInfo();
pdf.TimestampAndSave(timestampOptions, "b-lta.pdf", incrementalOptions);
}
Certificare PDF con LTV in C# e VB.NET
Le firme digitali nei documenti PDF certificati non consentono alcuna modifica. Le applicazioni di lettura PDF visualizzano tali firme con un'icona speciale e una didascalia che inizia con "Certificato da".
Qualsiasi modifica a un PDF certificato invaliderà la firma, il che significa che non è possibile aggiungere informazioni LTV senza invalidare la certificazione.
Docotic.Pdf offre la possibilità di generare documenti PDF certificati con informazioni LTV. Utilizzare l'overload AddLtvInfo(PdfSigningOptions) per aggiungere informazioni LTV durante la firma. Questo esempio di codice mostra come certificare un 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.
Nel 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
È possibile aggiungere informazioni di convalida a lungo termine (LTV) alle firme PDF per garantire la conformità legale e l'affidabilità 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.
Utilizzare la libreria Docotic.Pdf per aggiungere informazioni LTV alle firme PDF nelle applicazioni .NET. È anche possibile certificare i documenti PDF con LTV.
Esplora esempi di codice per firme digitali in PDF da GitHub. Consulta gli articoli correlati per ulteriori informazioni:
- Firma documenti PDF in C# e VB.NET
- Verifica la firma PDF in C# e VB.NET
- Come firmare PDF con token USB e dispositivi HSM in C# e VB.NET
Domande frequenti
Come posso evitare il messaggio "Validità della firma sconosciuta" in Adobe Acrobat?
Adobe Acrobat visualizza l'avviso "Validità della firma sconosciuta" quando non riesce a verificare il certificato del firmatario. Questo accade in genere quando il certificato è mancante, non attendibile, autofirmato, revocato, scaduto o non ancora attivo.
Ottieni il certificato corretto](external-signing#certificate) per evitare l'avviso o creare documenti conformi allo standard UE (eIDAS).
In alternativa, puoi aggiungere manualmente i certificati a "Certificati attendibili" in Adobe
Acrobat. Questa opzione è disponibile in:
Menu > Preferenze > Firme > Identità e certificati attendibili
.
Se devi considerare attendibile un certificato per i documenti certificati, assicurati di concedere l'autorizzazione corrispondente:
Come posso verificare se una firma PDF è abilitata per LTV?
Puoi utilizzare Adobe Reader o il validatore PAdES della Commissione Europea. Esplora la sezione Convalida PAdES per maggiori dettagli.
Perché Adobe Acrobat visualizza "La firma non è abilitata per LTV"?
Adobe Acrobat verifica le informazioni di revoca come parte del processo di convalida della firma. Se deve scaricare dati, la firma corrispondente non è abilitata per LTV.
Come posso rendere una firma PDF conforme alle specifiche ETSI?
Seguire i requisiti per Firme elettroniche avanzate PDF. È necessario utilizzare certificati emessi da provider elencati nelle European Union Trusted Lists (EUTL).
Come si ottiene l'indicatore "Firma con LTV abilitata" in Adobe Reader?
Innanzitutto, la firma deve essere conforme almeno al livello PAdES-B-T. Quindi, è necessario aggiungere le informazioni LTV, inclusi tutti i certificati nella catena di attendibilità, le risposte OCSP e le CRLs .
Le sezioni Creare una firma PDF con LTV abilitata e Aggiungere informazioni LTV a firme PDF esistenti spiegano come aggiungere informazioni LTV in C# e VB.NET.
Come si abilita LTV per una firma con marca temporale di un documento?
The process is similar to that of standard PDF signatures. You need to add the LTV information for a document timestamp signature to the DSS dictionary.
Fare riferimento all'esempio di codice nella sezione Aggiungere informazioni LTV a una firma con marca temporale di un documento.
È possibile eseguire LTV e marcatura temporale nella stessa operazione?
Sì! Consulta l'esempio di codice nella sezione Come convertire le firme PAdES-B-T in B-LTA.
Come si crea una firma digitale con LTV in C#?
Utilizza la libreria Docotic.Pdf. Per generare firme elettroniche avanzate, consulta gli esempi di codice nella sezione Come creare una firma PAdES-B-LT. Per creare firme elettroniche qualificate, consulta la sezione Come creare una firma PAdES-B-LTA.
Come si abilita la 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 originale firmato. Consulta la sezione Certificare PDF con LTV per maggiori dettagli.
Come si abilita la convalida a lungo termine (LTV) quando si firmano documenti PDF esternamente?
Utilizza la libreria Docotic.Pdf per firmare documenti PDF con LTV utilizzando 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 una firma PAdES-B-LT.
Come si firma un PDF con più firme e si abilita LTV?
Combina gli esempi di codice Firma un modulo PDF da più persone e Aggiungi informazioni LTV alle firme esistenti.