Buenas!

Sigo pasando en limpio todas las herramientas interesantes que me topé (y sigo topando) en mi profesión.

Hoy voy a repasar RenewCert una vez escrita por Microsoft pero retocada por Cliff Stanford, quien la mejoró la aplicación original.

Un poco de fondo, cuando en Visual Studio se publica una aplicación usando ClickOnce, se puede firmar usando un certificado PFX que se autogenera. Este certificado sólo influye en el origen de la aplicación, es decir, crea un matrimonio entre la App y la URL de descarga. Si un usuario intenta instalar la aplicación con otro PFX al que tiene instalado, ClickOnce solicita borrar la instalación actual.

Hasta acá todo bien… excepto que el certificado dura 1 año. Sí, un año. Esto significa que si publicaron con ClickOnce firmado el 13/10/17, ese PFX está vencido hoy y si vuelven a publicar, sus clientes deben eliminar la aplicación y volverla a instalar. Rídiculo.

Acá entra en escena RenewCert. Existen muchas modificaciones al código de Cliff, por ejemplo esta, donde, por ejemplo, le agrega 105 años al vencimiento contra 5 años que agrega el original de Cliff.

Pero vamos a hacer algo más divertido, bajar el código de fuente del sitio de Cliff, abrirlo con Visual Studio, editar y compilar.

Lo más importante -el tiempo de vencimiento- está en RenewCert.cpp, lineas 106-107:

GetSystemTime(&certExpireDate);
certExpireDate.wYear += 5;

Podemos cambiar el 5 (yo lo tengo en 100) por los años que queramos, o modificar para pasarlo por parámetro, etc etc.

Tengo un test.pfx que según CertUtil vence en el año 2023

NSSM

Entonces utilizando RenewCert cambiamos el vencimiento por 100 años más.

NOTA: La extención se hace sobre la fecha de creación del PFX y no del vencimiento. En otras palabras, correr 2 veces el siguiente comando no da 200 años sino 100, porque siempre hace YEAR(Issuer.NotBefore) + 100 (o el valor que hayan configurado).

renewcert test.pfx newTest.pfx "CN=Helas" 123456
  • test.pfx: El PFX al que le vamos a extender el vencimiento
  • newTest.pfx: Nuevo certificado que se va a crear
  • “CN=Helas”: El CommonName, es mejor volver a poner el que vimos con CertUtil
  • 123456: La clave -opcional- con la que fue firmado el PFX.

Corremos certutil de nuevo y vemos el vencimiento en el año 2118

NSSM

Yapa

Cambiar la clave de un PFX (sabiendo la actual)

Utilizando OpenSSL

openssl pkcs12 -in test.pfx -out cert.pem -nodes
(Ingresar clave actual)
openssl pkcs12 -export -out newTest.pfx -in cert.pem
(Ingresar nueva clave)

Helas