Validación fecha vencimiento archivo .p12 del Ministerio de Hacienda

Para el uso de la factura electrónica en Costa Rica, se requiere hacer uso de un certificado de seguridad emitido desde el ATV del Ministerio de Hacienda (https://www.hacieda.go.cr), dicho archivo tiene una vigencia de 24 meses y acutalmente es bastante complicado (por no decir que imposible) validar la fecha de vencimiento del .p12, en la comunidad algunos compañeros diseñaron unos scripts para poder validar la fecha de vencimineto.

Para DOS / Linux

Sustituir nombre_de_archivo, por el nombre de su archivo p12

@echo off
cls
set p12File=nombre_de_archivo
openssl pkcs12 -in %p12File%.p12 -out %p12File%.pem -nodes
openssl x509 -noout -enddate -in %p12File%.pem
pause

Para Java sólo hay que cambiar como se obtiene la ruta hasta el archivo y el PIN

KeyStore p12 = KeyStore.getInstance(«PKCS12»);
String rutaLlave = ei.obtenerUbicacionLlaveCritografica() //como se obtenga la ruta a la llave
log.info(«ruta a la llave: » + rutaLlave)
FileInputStream fi = null
try
{
fi = new FileInputStream(rutaLlave)
}
catch (java.io.FileNotFoundException exc)
{
fi = null
}
if(fi!=null)
{
String claveLlave = ei.obtenerLlaveCriptograficaClave() //como se obtenta el PIN de la llave
p12.load(fi, claveLlave.toCharArray());
Enumeration e = p12.aliases();
while (e.hasMoreElements())
{
String alias = (String) e.nextElement();
X509Certificate c = (X509Certificate) p12.getCertificate(alias);
log.info(«c.notAfter: » + c.notAfter)
log.info(«c.notBefore: » + c.notBefore)
fechaCaducidad = c.notAfter
}
}

Para C# tenemos:

X509Certificate2 cert = new X509Certificate2(rutaCertificado, claveCertificado)

if (cert.NotAfter > DateTime.Now)

{

Console.Write(«Certificado válido. Vencimiento: » + cert.NotAfter.ToString(«dd-MM-yyyy HH:mm:sszzz»));

}

else

{

Console.Write(«Certificado inválido»);

}

Con (cualquiera de) estos tres procesos es posible saber la fecha de vencimiento del archivo .p12 generado para el MH.

Gracias a BlackHat (DOS/Linux), Jesús Rodríguez (Java) y Roy Rojas (C#) por compartir la información.

Dudas o consultas puden ser hechas en https://t.me/CRLibreFE