Cómo crear un certificado OpenSSL para localhost en Windows
|Este tutorial es para crear un certificado auto firmado para ser utilizado en pruebas desde nuestro servidor local, este no tendrá ningún tipo de validez externa ya que no es firmado por una entidad certificadora.
Lo primero es descargar el paquete OpenSSL v1.1.1 para Windows de la siguiente dirección web:
https://slproweb.com/products/Win32OpenSSL.html
Descargar una de las versiones que no sea Light, por ejemplo:
Una vez descargado, instalar como cualquier otro programa sin mover ninguna de las opciones que ya tiene por defecto el instalador.
Después de instalado abrir una consola o cmd con permisos de administrador y crear una variable de configuración para OpenSSL con el siguiente comando:
1 |
set OPENSSL_CONF=C:\Program Files\OpenSSL-Win64\bin\openssl.cfg |
Agregar una variable de entorno para poder utilizar el comando "openssl" en la consola. Abrir la ventana para agregar variables de entorno del sistema operativo, depende de la versión de Windows, y agregar la ruta del directorio "bin" al Path de las variables:
C:\Program Files\OpenSSL-Win64\bin
Dependiendo de la versión de Windows habrá que reiniciar el equipo, si es Windows 10 bastará con cerrar la consola y volver a abrir otra (con permisos de administrador), digitar el comando "openssl" y el resultado debe ser el interprete de comandos de OpenSSL.
Podemos salir del interprete de comandos con "exit", ahora debemos crear una carpeta donde guardaremos los certificados que estamos por hacer, mi carpeta se llama "ssl_local".
Desde la consola navegamos hasta ese directorio donde crearemos una llave RSA-2048 que luego servirá para generar el certificado, podes ocupar los nombres que queras, yo le llamaré "localCA.key", usamos el siguiente comando:
1 |
openssl genrsa -des3 -out localCA.key 2048 |
Luego de ejecutarlo te pedirá que introduzcas una contraseña y luego la confirmes.
Ahora crearé el siguiente archivo pem que es el medio para codificar data, con nombre "localCA.pem" y que tendrá una validez de 1,024 días para este ejemplo:
1 |
openssl req -x509 -new -nodes -key localCA.key -sha256 -days 1024 -out localCA.pem |
Como notarán estamos utilizando la llave que recién creamos para lograr generar el certificado pem. Debemos introducir la contraseña de la llave.
En el procedimiento se pedirán algunos valores de configuración para el certificado, algunos se pueden dejar en blanco o introducir el valor por defecto, queda a discreción:
1 2 3 4 5 6 7 |
>Country Name (2 letter code) [AU]: SV >State or Province Name (full name) [Some-State]: San Salvador >Locality Name (eg, city) []: San Salvador >Organization Name (eg, company) [Internet Widgits Pty Ltd]: kiuvox >Organizational Unit Name (eg, section) []: kiuvox >Common Name (e.g. server FQDN or YOUR name) []: kiuvox.local >Email Address []: correo@algo.com |
Ahora de requisito debemos crear dos archivos para crear finalmente los certificados ssl que buscamos obtener. Al primero le llamaremos "server.csr.cnf", utiliza la información como se introdujo al crear el certificado pem:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C=SV ST=San Salvador L=San Salvador O=kiuvox OU=kiuvox emailAddress=correo@algo.com CN = kiuvox.local |
El segundo archivo tendrá de nombre "v3.ext" que sirve para crear un certificado X509 v3, con el siguiente contenido:
1 2 3 4 5 6 7 |
authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = kiuvox.local |
Ya casi vamos llegando al final de lo que necesitamos, vamos a crear la llave y certificado que firma solicitudes para el dominio, vamos a utilizar el archivo de respuesta "server.csr.cnf" para crear los archivos "kiuvox.local.key" y "kiuvox.local.csr":
1 |
openssl req -new -sha256 -nodes -out kiuvox.local.csr -newkey rsa:2048 -keyout kiuvox.local.key -config server.csr.cnf |
Finalmente debemos firmar nuestro certificado, el resultado sera el archivo "kiuvox.local.crt", en el siguiente comando el parámetro "-days" indica la cantidad de días que tendrá de validez el certificado, también utilizaremos el archivo v3.ext para introducir configuraciones:
1 |
openssl x509 -req -in kiuvox.local.csr -CA localCA.pem -CAkey localCA.key -CAcreateserial -out kiuvox.local.crt -days 730 -sha256 -extfile v3.ext |
Digitar la contraseña de la llave.
Esta da como resultado el certificado que podemos agregar, por ejemplo, a nuestro servidor web Apache.
Si desean ahondar en el significado de todos los comandos y parámetros ver la documentación de OpenSSL.