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
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.

Mantengo una copia de todos los archivos de mi sitio web en la computadora y uso una 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.

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.futbolgratis.org y no https://localhost/norfipc.futbolgratis.org
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.futbolgratis.org
emailAddress = Direccion de email
emailAddress_default = [email protected]
[ 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.futbolgratis.org
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.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)
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.

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".

2- En la ventana del asistente de importar certificados, marca la opción: "Equipo local" y presiona "Siguiente".

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".

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.futbolgratis.org"
ServerName norfipc.futbolgratis.org
ServerAlias *.norfipc.futbolgratis.org
ErrorLog "logs/norfipc.futbolgratis.org-error.log"
CustomLog "norfipc.futbolgratis.org-access.log" common
</VirtualHost>
<VirtualHost *:443>
DocumentRoot "C:/xampp/htdocs/norfipc.futbolgratis.org"
ServerName norfipc.futbolgratis.org
ServerAlias *.norfipc.futbolgratis.org
SSLEngine on
SSLCertificateFile "crt/norfipc.futbolgratis.org/server.crt"
SSLCertificateKeyFile "crt/norfipc.futbolgratis.org/server.key"
</VirtualHost>
En este ejemplo la carpeta con los archivos del sitio se encuentran en la ruta: C:/xampp/htdocs/Sustituye "norfipc.futbolgratis.org" 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.futbolgratis.org"
ServerName norfipc.futbolgratis.org:443
SSLEngine on
SSLCertificateFile "crt/norfipc.futbolgratis.org/server.crt"
SSLCertificateKeyFile "crt/norfipc.futbolgratis.org/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.futbolgratis.org
Sustituye norfipc.futbolgratis.org 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
✓ Instalar el servidor Apache y PHP con XAMPP en Windows
✓ Como instalar y configurar el servidor web Apache en Windows
✓ Usar VirtualHost en Apache para cargar sitios con su nombre de dominio
✓ Como tener mi blog de WordPress en la computadora
✓ Como instalar y configurar PHP en el servidor Apache
✓ Como instalar, configurar y usar el servidor IIS en Windows
✓ Como obtener un certificado SSL para un sitio web de internet
✓ Como instalar y configurar el servidor web Apache en Windows
✓ Usar VirtualHost en Apache para cargar sitios con su nombre de dominio
✓ Como tener mi blog de WordPress en la computadora
✓ Como instalar y configurar PHP en el servidor Apache
✓ Como instalar, configurar y usar el servidor IIS en Windows
✓ Como obtener un certificado SSL para un sitio web de internet
Comparta esta página
Facebook
Twitter