Volver |

Certificados autofirmados

Introducción

Cualquiera puede generar un certificado autofirmado donde uno mismo pasa a ser la autoridad certificante. El problema es que, evidentemente, nadie confiaría en la misma.

Crear certificado autofirmado para usarlo en una página web en el dominio localhost

Para crear un certificado autofirmado y que funcione en Google Chrome se deben seguir los siguientes pasos:

PASO 1

Generar un certificado como si fuéramos una Autoridad Certificante, al cual lo agregaremos en nuestro navegador (en este caso Google Chrome). Para ello:

A. Generar una clave privada:

openssl genrsa -des3 -out rootCA.key 2048

 B. Generar el certificado con la clave privada generada anteriormente:

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

En este punto habremos generado un archivo rootCA.pem, el cual es el certificado de la autoridad certificante que se debería agregar en chrome://settings/certificates en el tab Entidades emisoras de Google Chome.

PASO 2

Ahora, se debe crear un certificado firmado por esta nueva autoridad certificante. Este certificado que generaremos es el que utilizaremos para nuestro dominio localhost.

1. Crear un archivo con la configuración para realizar la solicitud de firma de ceritifcado (server.csr.cnf).

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C=AR
ST=Cordoba
L=Cordoba
O=Cordoba
OU=Localhost
emailAddress=desarrollador@yopmail.com
CN = localhost

2. Crear el archivo con la solicitud de firma (archivo csr) y también la clave privada del certificado web ejecutando lo siguiente:

sudo openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config server.csr.cnf

3. Crear el archivo v3.txt. Esto va a permitir generar un certificado X.509 versión 3.

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost

4. Finalmente ejecutar lo siguiente para generar el certificado (crt) firmado por la autoridad certificante.

sudo openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

 

En django se puede ejecutar un servidor con SSL de la siguiente forma:

python3 manage.py  runsslserver --certificate server.crt --key server.key

 

Basado en:

https://alexanderzeitler.com/articles/Fixing-Chrome-missing_subjectAltName-selfsigned-cert-openssl/

 

 

En este artículo participaron: