API Java del Motor SSigner¶
Clases Principales¶
SSigner¶
Punto de entrada principal para uso via CLI o integracion.
SSignerRemoto¶
Clase principal para operaciones de firma programaticas.
// Metodos principales
crearConfiguracion(Properties) -> SSignerConfiguracion
crearFirmaEnBlanco(String codigo, String docOriginal, String prefirma, String campo, Properties) -> byte[]
firmar(byte[] hashSha256, Properties) -> byte[]
insertarHashFirmado(String preFirma, File docFirmado, byte[] hashFirmado, String nombreCampo, Properties)
agregarLtv(File docFirmado, Properties)
SSignerConfiguracion¶
POJO con todas las propiedades de configuracion.
SSignerCades¶
Para firma CAdES (no PDF).
// Fase 1: Generar hash
byte[] signedAttrs = cades.generarHashParaFirmar(archivo, ssc);
// Fase 2: Firmar
byte[] firma = cades.firmarConClave(signedAttrs, ssc);
// Fase 3: Construir .p7m
cades.construirP7m(archivoOriginal, ssc, firma, archivoP7m);
SSignerFirmaDetached¶
Para firma detachada (directa sin fases).
SSignerFirmaDetached ssfd = new SSignerFirmaDetached(ssr);
ssfd.firmar(ssc, archivoEntrada, archivoSalida, "__signature__", "CODIGO");
ValidadorCertificado¶
Valida cadenas de certificados contra OCSP, CRL y TSL.
validarCadenaCompleta(Certificate[], boolean requiereNoRepudio) -> String
validarCertificadoTsa(X509Certificate) -> String
FirmaUtil¶
Genera apariencias de firma personalizadas.
generarRecuadroFirmanteYTexto(...)
generarRecuadroTextoConImagenDerecha(...)
generarRecuadroTextoConImagenIzquierda(...)
generarRecuadroTextoConImagenArriba(...)
generarRecuadroTextoConImagenAbajo(...)
CacheUtil¶
Utilidades de cache de archivos.
CacheUtil.guardar(carpeta, nombre, contenido) -> boolean
CacheUtil.leer(archivo) -> byte[]
CacheUtil.guardarPropiedades(props, ruta) -> boolean
Uso Programatico - Ejemplo Completo¶
// 1. Cargar keystore
KeyStore ks = KeyStore.getInstance("Windows-My");
ks.load(null);
// 2. Configurar firma
SSignerConfiguracion ssc = new SSignerConfiguracion();
ssc.setAlias("mi-alias");
ssc.setVisible(true);
ssc.setPagina(1);
ssc.setX(0); ssc.setY(0); ssc.setX1(200); ssc.setY1(100);
ssc.setTexto("Firmado por [CN]");
ssc.setAlgoritmo("SHA256");
ssc.setEstiloFirma(0);
// 3. Crear firmante remoto
SSignerRemoto ssr = new SSignerRemoto();
ssr.setKs(ks);
ssr.setClavePrivada((PrivateKey) ks.getKey("mi-alias", null));
ssr.setCadenaCertificacion(ks.getCertificateChain("mi-alias"));
ssr.setNombreProveedor(ks.getProvider().getName());
// 4. Fase 1: Crear campo en blanco
byte[] hash = ssr.crearFirmaEnBlanco("CODIGO",
"/entrada/doc.pdf", "/salida/doc.prefirma", "__signature__", props);
// 5. Fase 2: Firmar hash
byte[] hashFirmado = ssr.firmar(hash, props);
// 6. Fase 3: Insertar en PDF
ssr.insertarHashFirmado("/salida/doc.prefirma",
new File("/salida/doc_firmado.pdf"), hashFirmado, "__signature__", props);
Uso con Properties¶
Properties props = new Properties();
props.setProperty("firma.repositorio", "Windows-My");
props.setProperty("firma.visible", "true");
props.setProperty("firma.pagina", "1");
props.setProperty("firma.estilo", "3");
props.setProperty("firma.texto", "Firmado por [CN] el [FECHA]");
props.setProperty("firma.x", "0");
props.setProperty("firma.y", "0");
props.setProperty("firma.x1", "200");
props.setProperty("firma.y1", "100");
props.setProperty("firma.carpeta.entrada", "/ruta/entrada");
props.setProperty("firma.carpeta.salida", "/ruta/salida");
props.setProperty("firma.algoritmo", "SHA256");
SSignerRemoto ssr = new SSignerRemoto();
ssr.setKs(keyStore);
ssr.setClavePrivada(privateKey);
ssr.setCadenaCertificacion(certChain);
Dependencias Maven¶
<dependency>
<groupId>com.saeta</groupId>
<artifactId>ssigner</artifactId>
<version>2.5.2</version>
<classifier>all</classifier>
</dependency>
Placeholders del Texto¶
| Placeholder | Descripcion |
|---|---|
[CN] | Common Name |
[O] | Organizacion |
[OU] | Unidad organizacional |
[T] | Title |
[C] | Pais |
[ST] | Estado/Provincia |
[S] | Estado (alias) |
[L] | Localidad |
[STREET] | Calle |
[E] | |
[MOTIVO] | Motivo de firma |
[LOCACION] | Ubicacion |
[FECHA] | Fecha (dd/MM/yyyy) |
[HORA] | Hora (HH:mm:ss) |
[FECHA_HORA] | Fecha y hora |
Archivos Generados¶
Durante el proceso de firma se generan:
| Fase | Archivo | Descripcion |
|---|---|---|
| 1 | documento.prefirma | PDF con campo de firma en blanco |
| 1 | documento.prefirma.sha256 | Hash SHA256 del documento |
| 2 | documento.prefirma.firmado | Hash firmado (PKCS#7) |
| 3 | documento_firmado.pdf | PDF final con firma insertada |