NorfiPC
NorfiPC » Web » Crear Certificado SSL local

Como crear un certificado SSL local en Apache, válido para Google Chrome


Actualizado: 21 de diciembre del 2022
Por: Norfi Carrodeguas
Navegar por las páginas de un sitio usando HTTPS en un servidor local en Windows, sin recibir el error de privacidad de Google Chrome, por un certificado inválido. Como crear el certificado y la clave privada del servidor.
Como crear un certificado SSL local en Apache, válido para Google Chrome

Mantengo una copia de todos los archivos de mi sitio web en la computadora y uso una instalación local del servidor Apache, creada con XAMPP para navegar por las páginas sin conexión, exactamente igual que si estuviera online, usando el protocolo HTTPS.
Para eso uso VirtualHost.
Esto me ayuda a comprobar el funcionamiento del sitio de forma local, antes de subir los archivos a internet.
El único impedimento hasta ahora ha sido navegar con Google Chrome, que al tratar de acceder a una página que usa SSL de forma local, devuelve un mensaje de Error de privacidad, a causa de un certificado de autoridad invalido.
Error de privacidad del navegador Google Chrome, al acceder a un sitio local con HTTPS
Una solución parcial ha sido navegar con los navegadores Firefox o Waterfox, agregando una excepción de seguridad para el sitio.


Crear un certificado SSL local válido para un sitio web


Afortunadamente es posible crear un certificado SSL que funciona de forma local y que Google Chrome acepta como válido.
El método que explico en esta página fue tomado del artículo How to Create Valid SSL in localhost for XAMPP y modificado por mí para facilitar su uso.
El único requisito es descargar dos archivos desde Github, aunque también se pueden crear manualmente.
También es necesario modificar archivos de configuración de Apache, para poder cargar en el navegador directamente el dominio y no localhost.
Por ejemplo: https://norfipc.com y no https://localhost/norfipc.com
Para el segundo caso no es necesario nada de esto, podemos habilitar en chrome://flags/ la opción "Allow invalid certificates for resources loaded from localhost"
A continuación detallo todos los pasos necesarios para crear nuestro certificado local.


Archivos para crear el certificado SSL


Sigue los siguientes pasos:
1- En el directorio Apache del servidor crea una nueva carpeta nombrada "crt".
En caso de instalar Apache con XAMPP, la ruta sería: C:\xampp\apache\
En caso de instalar Apache directamente, la ruta sería: C:\apache\
2- Descarga los archivos "cert-template.conf" y "make-cert.bat" desde la siguiente página de Github.
Para eso da un clic en el botón "Descargar Zip" y descomprime el archivo descargado.
A continuación, sitúa los dos archivos dentro de la carpeta crt, creada anteriormente.
También se pueden crear los dos archivos manualmente copiando y pegando el siguiente código en un archivo de texto plano.
El primer caso se ha modificado el archivo original de Github, incluyendo los datos que uso en el certificado local creado para este sitio.

Archivo cert-template.conf
[ req ]

default_bits        = 2048
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

[ subject ]

countryName                 = Country Name (codigo de dos letras)
countryName_default         = CU

stateOrProvinceName         = Nombre del estado o provincia
stateOrProvinceName_default = La Habana

localityName                = Nombre de la localidad o ciudad
localityName_default        = Habana

organizationName            = Nombre de la orgganizacion, compania o nombre personal
organizationName_default    = NorfiPC

commonName                  = Nombre del dominio
commonName_default          = norfipc.com

emailAddress                = Direccion de email
emailAddress_default        = info@norfipc.com

[ x509_ext ]

subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer

basicConstraints       = CA:FALSE
keyUsage               = digitalSignature, keyEncipherment
subjectAltName         = @alternate_names
nsComment              = "OpenSSL Generated Certificate"

[ req_ext ]

subjectKeyIdentifier = hash

basicConstraints     = CA:FALSE
keyUsage             = digitalSignature, keyEncipherment
subjectAltName       = @alternate_names
nsComment            = "OpenSSL Generated Certificate"

[ alternate_names ]

DNS.1       = norfipc.com    

Archivo make-cert.bat
@echo off
set /p domain="Introduce el nombre del dominio: "
set OPENSSL_CONF=../conf/openssl.cnf
setlocal enabledelayedexpansion
set INTEXTFILE=cert-template.conf
set OUTTEXTFILE=cert.conf
set SEARCHTEXT={{DOMAIN}}
set REPLACETEXT=%domain%
if exist %OUTTEXTFILE% del /F %OUTTEXTFILE%
for /f "tokens=1,* delims=¶" %%A in ( '"findstr /n ^^ %INTEXTFILE%"') do (
   SET string=%%A
   for /f "delims=: tokens=1,*" %%a in ("!string!") do set "string=%%b"
   if  "!string!" == "" (
       echo.>>%OUTTEXTFILE%
   ) else (
      SET modified=!string:%SEARCHTEXT%=%REPLACETEXT%!
      echo !modified! >> %OUTTEXTFILE%
  )
)
if not exist .\%domain% mkdir .\%domain%
..\bin\openssl req -config %OUTTEXTFILE% -new -sha256 -newkey rsa:2048 -nodes -keyout %domain%\server.key -x509 -days 365 -out %domain%\server.crt
if exist %OUTTEXTFILE% del /F %OUTTEXTFILE%
echo.
echo -----
echo El certificado fue creado.
echo.
pause    


Configurar y personalizar el certificado SSL


El primer archivo nombrado "cert-template.conf" es una plantilla.
Es opcional editarla ingresando los parámetros que necesitamos tenga nuestro certificado.
Para editar el archivo necesitamos abrirlo con un editor de texto plano que puede ser el sencillo Bloc de notas, pero preferentemente uno como Notepad++.
Los parámetros que debemos especificar son los siguientes:
countryName_default (código del país)
stateOrProvinceName_default (estado o provincia)
localityName_default (ciudad o localidad)
organizationName_default (organización)
commonName_default (dominio del sitio web)
emailAddress_default (email)
DNS.1 (dominio)
Si no editamos dicho archivo, podemos introducir los datos más tarde.
El segundo archivo llamado "make-cert.bat", es una aplicación que lee los datos del archivo de configuración e inicia la herramienta "openssl" incluida en Apache, para crear el archivo de certificado CRT y la clave.


Crear el certificado y la clave privada del servidor con OPENSSL


Después de personalizar "cert-template.conf" y guardar los cambios, solo necesitamos ejecutar "make-cert.bat".
Al dar dos clics se abre la ventana del Símbolo del sistema.
El primer dato que debemos introducir es el nombre del dominio y presionar Enter.
A continuación si modificamos previamente el archivo cert-template.conf, solo será necesario presionar Enter en cada línea, sino es asi, debemos especificar cada dato de nuestro certificado.
Crear el certificado y la clave privada del servidor con OPENSSL
Finalmente en el mismo directorio será creada una carpeta con el nombre de dominio especificado, en cuyo interior se situarán los dos archivos "server.crt" y "server.key".
El primero de ellos "server.crt" es Server Certificate, el certificado SSL del servidor, similar al que proporcionan autoridades de certificación en la red, pero que solo podemos usar de forma local.
El archivo "server.key" es Server Private Key, la clave privada.
El próximo paso es agregar ambos a Windows.


Agregar el Certificado SSL local a Windows


Sigue los siguientes pasos:
1- Dos clics en el archivo "server.crt".
Se abre la herramienta de certificados de Windows, con información del archivo.
Presiona "Instalar certificado".
Agregar un Certificado SSL local a Windows
2- En la ventana del asistente de importar certificados, marca la opción: "Equipo local" y presiona "Siguiente".
Importar un certificado
3- Marca "Colocar todos los certificados en el siguiente almacén".
Presiona "Examinar" y selecciona: "Entidades de certificación raíz de confianza"
Presiona "Aceptar" y "Siguiente".
Seleccionar el almacen de certificados
4- Finaliza la configuración.
Al final recibiremos el mensaje que la importación se completó correctamente.


Cambios en la configuracion de Apache


Para lograr que un sitio web se pueda cargar usando su nombre de dominio y el protocolo HTTPS, en un servidor local con Apache, es necesario hacer dos cambios: agregar una nueva entrada en VirtualHost y habilitar SSL.

Configurar VirtualHost en Apache

Virtual Host es un módulo de Apache que da la posibilidad de hacer funcionar más de un sitio web en el servidor.
Puede estar basado en la dirección IP o el nombre del sitio.
Podemos incluir en el archivo de configuración los datos de uno o de varios sitios, cuyos archivos se encuentren en la raíz del servidor.
En este ejemplo necesitamos agregar la entrada correspondiente a nuestro dominio.
Para eso haz lo siguiente:
- Edita el archivo de configuración "httpd-vhosts.conf".
Está situado en la ruta: apache – config – extra
- Agrega las siguientes líneas:
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/norfipc.com"
ServerName norfipc.com
ServerAlias *.norfipc.com
ErrorLog "logs/norfipc.com-error.log"
CustomLog "norfipc.com-access.log" common
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "C:/xampp/htdocs/norfipc.com"
ServerName norfipc.com
ServerAlias *.norfipc.com
SSLEngine on
SSLCertificateFile "crt/norfipc.com/server.crt"
SSLCertificateKeyFile "crt/norfipc.com/server.key"
</VirtualHost>   
En este ejemplo la carpeta con los archivos del sitio se encuentran en la ruta: C:/xampp/htdocs/
Sustituye "norfipc.com" por el nombre de dominio del sitio.
Verifica la ruta a los archivos "server.crt" y "server.key", creados anteriormente.


Configurar SSL en Apache

Edita el archivo de configuración "httpd-ssl.conf"
Está situado en el mismo directorio que el archivo anterior.
Descomenta las siguientes líneas (retirar el carácter almohadilla # de su comienzo) y agrega los valores correctos.
<VirtualHost _default_:443>
DocumentRoot "C:/xampp/htdocs/norfipc.com"
ServerName norfipc.com:443
SSLEngine on
SSLCertificateFile "crt/norfipc.com/server.crt"
SSLCertificateKeyFile "crt/norfipc.com/server.key"   
Después de los dos cambios anteriores reinicia Apache y comprueba que no existe ningún error.


Configurar el archivo hosts de Windows


El ajuste final es lograr que se carguen las páginas del sitio offline en el navegador web.
Para eso es necesario modificar el archivo hosts de Windows.
Este archivo funciona como una especie servidor DNS local y es donde primero accede el navegador, para resolver la relación de dominio / dirección IP.
El archivo hosts se encuentra en la siguiente ruta: C:/Windows/system32/Drivers/etc
Edítalo y agrégale la siguiente línea:
127.0.0.1 norfipc.com
Sustituye norfipc.com por el nombre del dominio.
Finalmente carga el sitio en el navegador web.
Si todo funciona correctamente, las páginas cargarán en Google Chrome, de forma similar que en internet.
Da un clic en el icono del candado en la barra de direcciones para comprobar que la conexión es segura y el certificado valido, como se muestra en la imagen de portada de este artículo.
Ante cualquier error, la causa debemos buscarla en los logs de Apache.


Utilizar distintos archivos hosts online y offline

Al conectarnos a internet debemos retirar o descomentar la línea del archivo hosts, porque si no el navegador cargará solo la copia del sitio local.
Lógicamente esto es algo tedioso y poco práctico.
La solución es usar un archivo batch antes de conectarnos a internet o de usar la copia local, que funciona como un interruptor, escribiendo distintas copias creadas del archivo hosts.
Lee como hacerlo en el siguiente artículo: Como alternar entre dos archivos hosts diferentes

Páginas relacionadas



Comparta esta página
Facebook
Twitter

Sígueme en las redes sociales


Norfipc en Facebook Norfipc en Twitter Canales RSS con las últimas publicaciones

 
Inicio | Mapa del sitio | Buscar | Sobre mí