public final class PAdESTriPhaseSigner
extends java.lang.Object
No firma PDF cifrados.
Necesita iText 2.1.7 con modificaciones específicas.
Esta clase no interacciona directamente en ningún momento con el usuario ni usa interfaces gráficos.
La firma electrónica en tres fases está pensada para entornos donde la clave privada reside en un sistema con al menos alguna de las siguientes restricciones:
Estos condicionantes convierten la firma trifásica en una opción perfectamente adaptada a los dispositivos móviles, donde se dan tanto la heterogeneidad de sistemas operativos (Apple iOS, Google Android, RIM BlackBerry, Microsoft Windows Phone, etc.) y las limitaciones en potencia de proceso, memoria y comunicaciones; en estas últimas hay que tener en cuenta el coste, especialmente si estamos haciendo uso de una red de otro operador en itinerancia (roaming).
El funcionamiento típico de una firma trifásica en la que intervienen un disposotivo móvil, un servidor Web (que hace la pre-firma y la post-firma) y un servidor documental podría ser el siguiente:
Pre-firma:
Firma:
Post-firma:
Es conveniente tener en cuenta al usar firmas trifásicas que es necesario disponer de un mecanismo para que el usuario pueda ver en todo momento los documentos que está firmando (una copia que refleje con fidelidad el contenido firmado puede ser suficiente) para evitar situaciones de repudio.
Una pecualiaridad de las firmas trifásicas PAdES es que en la generación o firma de un PDF se genera de forma
automática un identificador único y aleatorio llamado FILE_ID, que hace que al firmar en momentos diferentes
dos PDF exactamente iguales se generen PDF con un FILE_ID distinto, y, por lo tanto, con la huella
digital de la firma electrónica distinta.
Para solventar este inconveniente, en la firma trifásica PDF, se considera prefirma tanto la totalidad de los atributos
CAdES a firmar como el FILE_ID del PDF que se debe compartir entre pre-firma y post-firma.
allowSigningCertifiedPdfs
para establecer un comportamiento por
defecto respecto a los PDF certificados.Modifier and Type | Field and Description |
---|---|
static java.lang.String |
ITEXT_VERSION
Versión de iText necesaria para el uso de esta clase (2.1.7).
|
static int |
LAST_PAGE
Referencia a la última página del documento PDF.
|
Modifier and Type | Method and Description |
---|---|
static byte[] |
postSign(java.lang.String digestAlgorithmName,
byte[] inPdf,
java.security.cert.Certificate[] signerCertificateChain,
byte[] pkcs1Signature,
PdfSignResult preSign,
SignEnhancer enhancer,
java.util.Properties enhancerConfig)
Post-firma en PAdES un documento PDF a partir de una pre-firma y la firma PKCS#1, generando un PDF final completo.
|
static PdfSignResult |
preSign(java.lang.String digestAlgorithmName,
byte[] inPDF,
java.security.cert.Certificate[] signerCertificateChain,
java.util.GregorianCalendar signTime,
java.util.Properties xParams)
Obtiene la pre-firma PAdES/CAdES de un PDF (atributos CAdES a firmar)
|
public static final int LAST_PAGE
public static final java.lang.String ITEXT_VERSION
public static PdfSignResult preSign(java.lang.String digestAlgorithmName, byte[] inPDF, java.security.cert.Certificate[] signerCertificateChain, java.util.GregorianCalendar signTime, java.util.Properties xParams) throws java.io.IOException, AOException, com.lowagie.text.DocumentException
digestAlgorithmName
- Nombre del algoritmo de huella digital usado para la firma. Debe usarse exactamente el mismo valor en la post-firma.
Se aceptan los siguientes algoritmos en el parámetro digestAlgorithmName
:
inPDF
- PDF a firmar. Debe usarse exactamente el mismo documento en la post-firma.signerCertificateChain
- Cadena de certificados del firmante Debe usarse exactamente la misma cadena de certificados en la post-firma.xParams
- Parámetros adicionales para la firma (detalle). Deben usarse exactamente los mismos valores en la post-firma.signTime
- Momento de la firma. Debe usarse exactamente el mismo valor en la post-firma.java.io.IOException
- En caso de errores de entrada / salidaAOException
- En caso de cualquier otro tipo de errorcom.lowagie.text.DocumentException
- En caso de errores en el XML de sesiónpublic static byte[] postSign(java.lang.String digestAlgorithmName, byte[] inPdf, java.security.cert.Certificate[] signerCertificateChain, byte[] pkcs1Signature, PdfSignResult preSign, SignEnhancer enhancer, java.util.Properties enhancerConfig) throws AOException, java.io.IOException, java.security.NoSuchAlgorithmException
digestAlgorithmName
- Nombre del algoritmo de huella digital usado para la firma (debe ser el mismo que el usado en la pre-firma).
Se aceptan los siguientes algoritmos en el parámetro digestAlgorithmName
:
inPdf
- PDF a firmar (debe ser el mismo que el usado en la pre-firma).signerCertificateChain
- Cadena de certificados del firmante (debe ser la misma que la usado en la pre-firma).pkcs1Signature
- Resultado de la firma PKCS#1 v1.5 de los datos de la pre-firma.preSign
- Resultado de la pre-firmaenhancer
- Manejador para la generación de nuevos modos de firma (con
sello de tiempo, archivo longevo, etc.)enhancerConfig
- Configuración para generar el nuevo modo de firma.AOException
- en caso de cualquier tipo de errorjava.io.IOException
- Cuando ocurre algun error en la conversión o generación
de estructuras.java.security.NoSuchAlgorithmException
- Si hay problemas con el algoritmo durante el sello de tiempo.