Minientrada

Generar un certificado autofirmado

A veces necesito que mis sitios web funcionen sobre un canal HTTP seguro y no quiero, por falta de presupuesto o por falta de necesidad, que una CA (entidad certificadora de confianza) me firme un certificado.

Para estos casos, y usando OpenSSL, genero un certificado auto-firmado.

El certificado auto-firmado no sirve para garantizar la identidad de mi servidor, pero al menos me provee de un canal de comunicación seguro.

Esto suele ser un caso de uso bastante habitual en entornos de pruebas y/o de desarrollo.

Prerrequisitos

Autofirmar el certificado.

[1er paso] Generar una solicitud de firma de certificado (CSR, Certificate Signing Request)

La solicitud de firma de certificado contiene la información del certificado junto con la clave pública, y es la información que se envía a las autoridades certificadoras (CAs) para  que la firmen y generen el certificado de confianza.

Para generar la solicitud de firma CSR de un website que se llama techstrategydev.midominio.net, se ejecuta el siguiente comando:

$> openssl req -new -newkey rsa:2048 -nodes -keyout techstrategydev.midominio.net.key -out techstrategydev.midominio.net.csr

Generating a 2048 bit RSA private key

.....+++

...........................+++

writing new private key to 'techstrategydev.midominio.net.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:ES

State or Province Name (full name) [Some-State]:Bizkaia

Locality Name (eg, city) []:Bilbao

Organization Name (eg, company) [Internet Widgits Pty Ltd]:EGV COMPANY

Organizational Unit Name (eg, section) []:ARQUITECTURA

Common Name (e.g. server FQDN or YOUR name) []:techstrategydev.midominio.net

Email Address []:mi.email@midominio.net

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:xxxxxxxxxxxx

An optional company name []:

Esta ejecución debería generar dos ficheros:

  • El fichero *.key que es la clave privada que hay que guardar en un lugar seguro bajo siete candados. Este fichero está protegido por la contraseña que hemos introducido cuando nos ha pedido «A challenge password».
  • El fichero *.csr, que es la petición de firma de certificado que contiene la clave pública.

 

[2o paso (opcional)] Comprobar los datos introducidos en la solicitud de firma de certificado (CSR, Certificate Signing Request)

Se puede comprobar que la información que hemos introducido en la petición es correcta.

Se puede comprobar el «Subject» ejecutando el siguiente comando:

$> openssl req -subject -noout -in techstrategydev.midominio.net.csr

subject=/C=ES/ST=Bizkaia/L=Bilbao/O=EGV COMPANY/OU=ARQUITECTURA/CN=techstrategydev.midominio.net/emailAddress=mi.email@midominio.net

 

[3er paso] Auto-firmar la petición CSR y generar el certificado auto-firmado.

El fichero CSR es el que se envía a la entidad certificadora (CA) para que lo firme y nos devuelva el certificado firmado. En este caso, como ya hemos dicho, no vamos a enviarlo a ninguna CA si no que vamos a firmar nosotros la solicitud (CSR) usando la clave privada.

$> openssl x509 -req -days 1095 -in techstrategydev.midominio.net.csr -signkey techstrategydev.midominio.net.key -out techstrategydev.midominio.net.crt

El parámetro -days indica el número de días en los que el certificado es válido. En este caso, al indicar 1095 días estamos diciendo que el certificado tiene una validez de 3 años (365×3).

La ejecución de este comando nos genera un fichero *.crt que contiene el certificado auto-firmado.

[4o paso (opcional)] Generar el certificado en formato PFX

La extensión PFX se utiliza en los servidores de Windows para los archivos que contienen tanto los archivos de clave pública (el archivo *.crt con el certificado auto-firmado) y la clave privada que corresponde a ese certificado (generado por el servidor cuando hemos generado la CSR en el 1er paso).

Para obtener el fichero PFX se ejecuta el siguiente comando:

$> openssl pkcs12 -export -out techstrategydev.midominio.net.pfx -inkey techstrategydev.midominio.net.key -in techstrategydev.midominio.net.crt

Este comando nos solicitará una password para proteger la clave privada y tras esto nos genera un fichero *.pfx que ya podemos incluir en nuestro servidor windows, o como es mi caso en la nube de azure.

 

 

 

Deja un comentario