Configurando un certificado SSL de Let’s Encrypt para Apache en Windows

1
20969
Let’s Encrypt para Apache en Windows Portada

Tener un certificado SSL trae muchos beneficios a un sitio web, como proteger la información que se transfiere entre un visitante y el sitio web, además de lograr posicionar el sitio en los rankings de Google.

Let’s Encrypt es un esfuerzo de la Internet Security Research Group (ISRG) para proveer certificados SSL gratuitos y así promover que los sitios web migren hacia un entorno cifrado mucho más seguro. Este sistema de certificados gratuitos ha conseguido cada vez mayor popularidad y hoy en día lo ofrecen incluso proveedores de web hosting.

NOTAS IMPORTANTES
Debes tener un servidor web en Apache (implementado mediante XAMPP o algún otro software) en Windows. Lo he probado en Windows Server 2012 R2. Recuerda que debes poseer un dominio y éste tendrá que estar apuntando a tu servidor.

Paso 1. Descargar las Herramientas Necesarias

Para poder implementar let’s encrypt deberás utilizar una herramienta para Windows denominada letsencrypt-win-simple.

Puedes descargar la última versión de letsencryp-win-simple aquí.

A continuación debes descomprimir este archivo en una carpeta donde mantendrás el aplicativo constantemente (ya que deberás actualizar los certificados periódicamente).

Paso 2. Obtener un certificado SSL (Prueba)

Ahora deberás abrir la línea de comandos de Windows y posicionarte en la carpeta donde descomprimiste letsencryp-win-simple. En mi caso lo dejaré en el directorio raíz de Windows:

 
cd C:\letsencrypt-win-simple

Luego debes ejecutar la herramienta para que descargue un certificado en modo de prueba para tu dominio.

¿Por qué un modo de prueba? Porque Let’s Encrypt tiene un límite para la cantidad de certificados que emite y mediante los modos de prueba sorteamos esta limitación.

 
letsencrypt.exe --manualhost  --webroot <raíz de los archivos web> --test

En donde <dominio> debes colocar el dominio registrado que está apuntando a tu servidor y donde puse <raíz de los archivos web> es el directorio htdocs o www del servidor Apache.

Veamos un ejemplo:

 
letsencrypt.exe --manualhost www.miweb.es --webroot "D:\Servidoresxampphtdocs" --test

Si todo funcionó correctamente entonces deberá aparecer un mensaje como el que sigue:

 
Authorizing Identifier < tu-dominio > Using Challenge Type http-01
Writing challenge answer to < raíz de los archivos web >.well-known/acme-challenge/<texto desafío>
Answer should now be browsable at < raíz de los archivos web >/.well-known/acme-challenge/< texto desafío >
Submitting answer
Refreshing authorization
Authorization Result: valid

Requesting Certificate
Request Status: Created
Saving Certificate to C:UsersAppDataRoamingletsencrypt-win-simplehttpsacme-stage.api.letsencrypt.org< tu-dominio >-crt.der
Saving Issuer Certificate to D:Users< nombre de usuario >AppDataRoamingletsencrypt-win-simplehttpsacme-stage.api.letsencrypt.orgca--crt.pem
Saving Certificate to D:Users< nombre de usuario >AppDataRoamingletsencrypt-win-simplehttpsacme-stage.api.letsencrypt.org< tu-dominio >-all.pfx

Si has tenido un resultado positivo como el anterior, entonces puedes pasar al paso 3 donde descargaremos el certificado de manera oficial.

Para que Let’s Encrypt pueda autorizarse a sí mismo lo que hace es contactar al servidor donde apunta el dominio que estáis utilizando y mediante un control especial (challenge o desafío) se encargará de validar si realmente el dominio le pertenece al que solicita el certificado.

Este archivo que se usa para el desafío se debe ubicar dentro del directorio raíz del servidor Apache, por ejemplo: < raíz de los archivos web >/.well-known/, siendo .well-known el directorio donde estarán ubicados los archivos para el challenge. Es por ello sumamente importante que la URL http:///.well-known/ sea accesible por Let’s Encrypt.

Suele suceder que PHP redirecciona los accesos al directorio raíz de la URL. Entonces sería necesario crear un Alias en Apache que indique la ubicación del directorio .well-known:

Alias /.well-known < raíz de los archivos web >/.well-known

Recuerda que < raíz de los archivos web > será la ubicación donde se encuentran los archivos del servidor como por ejemplo en mi servidor está ubicado aquí: » D:/Servidores/xampp/htdocs/.well-known»

Luego reinicias el Apache e intenta nuevamente la prueba de descarga de certificado del Paso 2.

Paso 3. Obtener un certificado SSL oficial

Este paso es simple, lo único que debes hacer es remover la palabra −−test del comando utilizado anteriormente y quedaría de la siguiente manera:

 
letsencrypt.exe --manualhost --webroot <raíz de los archivos web>

Que en mi servidor quedaría de la siguiente manera:

 
letsencrypt.exe --manualhost www.miweb.es --webroot "D:\Servidores\xampp\htdocs"

A continuación la herramienta requerirá alguna información adicional. Al finalizar la obtención del certificado, la herramienta lets-encrypt-simple agregará una Tarea al Programador de Tareas de Windows que permitirá un control diario de la validez del certificado, ya que déjame recordarte que los certificados de Let’s Encrypt tienen una validez de 90 días. De esta manera no tendrás que preocuparte por los períodos de renovación ni nada por el estilo.

Al finalizar el proceso tendréis la información de tres archivos importantes (necesitarás anotar el path de éstos archivos así que prepara el NotePad):
• Archivo del Certificado SSL propiamente dicho;
• Archivo de llave o key del certificado;
• Cadena del certificado (propiedades de la entidad que da el certificado).

Paso 4. Configurar el certificado SSL para que funcione con Apache

¡Un momento! La cosa aún no ha terminado. Ahora deberás indicarle al servidor Apache que podrá funcionar mediante el protocolo SSL gracias al certificado que has descargado para el nombre de dominio. Además deberás redireccionar todo el tráfico que ingresa por HTTP para que lo haga por HTTPS como buena práctica.

Vamos a la configuración de Virtual Host en httpd.conf:

XAMPP Configuracion httpd.conf

Configurándolo de la siguiente manera:

<VirtualHost *:80>
ServerAdmin admin@ miweb.es
ServerName www.miweb.es
RewriteEngine On
# Redirect to the HTTPS site
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*)$ https://www.miweb.es/$1 [NE,L,R=301]
</VirtualHost>

Luego vamos a la configuración de Virtual Host de SSL en httpd-ssl.conf:

XAMPP Configuracion httpd-ssl.conf

Y lo dejamos así:

<VirtualHost *:443>
ServerAdmin admin@ miweb.es
ServerName www.miweb.es
RewriteEngine On
# Redirect to the correct domain name
RewriteCond %{HTTP_HOST} !^www.miweb.es $ [NC]
RewriteRule ^/?(.*)$ https://www.miweb.es /$1 [NE,L,R=301]

Alias /.well-known D:/Servidores/xampp/htdocs/.well-known

SSLEngine on
SSLCertificateFile "C:/Users/<usuario>/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/<tu dominio>-crt.pem"
SSLCertificateKeyFile "C:/Users/< usuario >/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/< tu dominio >-key.pem"
SSLCertificateChainFile "C:/Users/< usuario >/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/ca-<hexadecimal>-crt.pem"
</VirtualHost>

En la configuración de éste último Virtual Host agregamos el alias del directorio .well-known para que pueda ser utilizado en futuras renovaciones de certificados.

Lo único que resta hacer es reiniciar el servidor Apache y ya tendréis un servidor configurado para HTTPS con el certificado SSL de Let’s Encrypt.

Si este proceso no te resulta especialmente sencillo existen muchos servicios de web hosting que ofrecen certificados mediante Let’s Encrypt, puedes ver mas info en mi blog.

1 COMENTARIO

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad