Adminstración y validación de certificados x509 con verificaciones OCSP
npm install e.firmabash
npm install e.firma
`Uso Básico
$3
`typescript
import { x509Certificate } from 'e.firma';
import * as fs from 'fs';// Cargar certificado desde archivo
const certificateFile = fs.readFileSync('ruta/al/certificado.cer', 'binary');
const cert = new x509Certificate(certificateFile);
// Verificar tipo de certificado
console.log(cert.certificateType); // 'CSD' o 'EFIRMA'
// Verificar validez temporal
console.log(cert.valid); // true/false
// Verificar tipo de sujeto
console.log(cert.subjectType); // 'MORAL' o 'FISICA'
// Obtener número de serie
console.log(cert.serialNumber);
// Obtener versión AC
console.log(cert.acVersion); // 4 o 5
// Convertir a formato PEM
const pemFormat = cert.getPEM();
`$3
`typescript
import { x509Certificate } from 'e.firma';
import * as fs from 'fs';// Cargar certificado a verificar
const subjectCert = new x509Certificate(fs.readFileSync('certificado.cer', 'binary'));
// Cargar certificado emisor (AC4 o AC5 del SAT)
const issuerCert = new x509Certificate(fs.readFileSync('AC5_SAT.cer', 'binary'));
// Verificar integridad
const isValid = subjectCert.verifyIntegrity(issuerCert);
console.log('Certificado válido:', isValid);
`$3
`typescript
import { Ocsp } from 'e.firma';
import * as fs from 'fs';// Cargar certificados necesarios
const subjectCert = new x509Certificate(fs.readFileSync('certificado.cer', 'binary'));
const issuerCert = new x509Certificate(fs.readFileSync('AC5_SAT.cer', 'binary'));
const ocspCert = new x509Certificate(fs.readFileSync('ocsp.ac5_sat.cer', 'binary'));
// Crear instancia de OCSP
const ocsp = new Ocsp(
'https://cfdi.sat.gob.mx/edofiel',
issuerCert,
subjectCert,
ocspCert
);
// Verificar estado del certificado
try {
const response = await ocsp.verify();
console.log('Estado:', response.status); // 'GOOD', 'REVOKED', etc.
if (response.status === 'REVOKED') {
console.log('Fecha de revocación:', response.revocationTime);
}
} catch (error) {
console.error('Error en verificación OCSP:', error.message);
}
`$3
`typescript
import { PrivateKey } from 'e.firma';
import * as fs from 'fs';// Cargar llave privada
const keyFile = fs.readFileSync('ruta/a/llave.key', 'binary');
const privateKey = new PrivateKey(keyFile);
// Encriptar mensaje
const message = 'Mensaje a encriptar';
const encryptedMessage = privateKey.rsaEncrypt(message);
// Desencriptar mensaje
const decryptedMessage = privateKey.rsaDecrypt(encryptedMessage, 'contraseña');
// Firmar mensaje
const signature = privateKey.rsaSign(message, 'contraseña');
// Verificar firma con certificado
const cert = new x509Certificate(fs.readFileSync('certificado.cer', 'binary'));
const isValidSignature = cert.rsaVerifySignature(message, signature);
`$3
`typescript
import { x509Certificate } from 'e.firma';
import { PrivateKey } from 'e.firma';
import * as fs from 'fs';// Cargar certificado y llave privada
const cert = new x509Certificate(fs.readFileSync('certificado.cer', 'binary'));
const privateKey = new PrivateKey(fs.readFileSync('llave.key', 'binary'));
// Encriptar mensaje con certificado público
const message = 'Mensaje secreto';
const encryptedMessage = cert.rsaEncrypt(message);
// Desencriptar mensaje con llave privada
const decryptedMessage = privateKey.rsaDecrypt(encryptedMessage, 'contraseña');
// Verificar que el mensaje coincide
console.log('Mensaje original:', message);
console.log('Mensaje desencriptado:', decryptedMessage);
`Manejo de Errores
El paquete incluye manejo de errores específicos para diferentes situaciones:`typescript
try {
// Operaciones con certificados o llaves
} catch (error) {
if (error.message.includes('Verifique el archivo')) {
console.error('Error en formato de archivo');
} else if (error.message.includes('El certificado recibido no fue emitido')) {
console.error('Error en verificación de emisor');
} else if (error.message.includes('Error al consultar el servicio')) {
console.error('Error en servicio OCSP');
}
}
``