Para poder usar HTTPS en sitios web locales (como localhost, o en una red interna) es necesario generar certificados autofirmados. Usar certificados de Let's Encrypt u otras autoridades de certificación no es posible porque los dominios no son públicos.
- Abrir una línea de comandos y tener OpenSSL instalado.
Certificado raíz
Es necesario cambiar los campos days por la cantidad de días que quieres hasta que expire el certificado, y los archivos de salida por los que quieras. También se deben dar interactivamente los datos que pida.
mkdir certificados && cd certificados openssl req -x509 -nodes -new -sha512 -days 365 -newkey rsa:4096 -keyout ca.key -out ca.pem openssl x509 -outform pem -in ca.pem -out ca.crt
Certificados por stios
Lo primero es configurar las extensiones del certificado, que incluye los nombres alternativos del sitio web y las finalidades del certificado. Para ello, se crea un archivo v3.ext
con el siguiente contenido:
cat > v3.ext << EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = prueba1.lan EOF openssl req -new -nodes -newkey rsa:4096 -keyout local.key -out local.csr
Generar el primer certificado
El primer certificado se genera con el siguiente comando, cubriendo interactivamente los datos que pida.
$ openssl x509 -req -sha512 -days 365 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in local.csr \ -out local.crt
Generando más certificados
Ya que cada certificado tiene un "núnero de serie", los siugientes certificados no pueden tener el mismo. Para eso está el archivo ca.srl, que se puede incrementar con cada nuevo certificado. Para generar un certificado con esas características, podemos generarlo del siguiente modo.
openssl x509 -req -sha512 -days 365 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAserial ca.srl \ -in local.csr \ -out local.crt
Confiar en el certificado
Para que el navegador confíe en el certificado, hay que instalarlo en el sistema. Para ello, se puede usar el siguiente comando.
sudo cp ca.crt /usr/local/share/ca-certificates/mi-ca.crt
Y luego actualizar los certificados con el siguiente comando.
sudo update-ca-certificates
Usar el certificado en NGINX
Lo primero es copiar el certificado y la clave privada al directorio de configuración de NGINX.
sudo cp local.crt /etc/nginx/ssl/local.crt sudo cp local.key /etc/nginx/ssl/local.key
Para usar el certificado en NGINX, se debe configurar el sitio web con el siguiente contenido.
server { listen 443 ssl; server_name prueba1.lan; ssl_certificate /etc/nginx/certificados/local.crt; ssl_certificate_key /etc/nginx/certificados/local.key; location / { root /var/www/html; } }