Plesk: Redirección de dominio y Let’s Encrypt

Cuando tienes alojado un dominio en Plesk en el que quieres correo, pero el alojamiento va a ser una redirección, Let’s Encrypt no está disponible.

Plesk te da tres opciones de alojamiento: ninguno, redirección, y sitio web.

En los casos de ninguno y redirección, no puedes crear un certificado Let’s Encrypt, por lo que el correo, si lo quieres, no podrá ser leído de forma segura. Funcionará en los puertos sin certificados, pero no en los seguros.

La opción alternativa si no quieres web, pero sí correo, en este caso, es la de comprar un certificado TLS wildcard, ya que tendrás que proteger también el subdominio de webmail.

¿Qué hacer, entonces, si quiero tener correo seguro, y un certificado Let’s Encrypt? Deberás crear un sitio web, aunque, por ejemplo, luego hagas una redirección a otro dominio.

En este caso vamos a crear el dominio example.com. Le crearemos un sitio web y el correo, por ahora todo sin certificado. Una vez lo tengamos, seguiremos los siguientes pasos.

En las opciones de Configuración de Apache y nginx, añadiremos a las Directivas adicionales de nginx lo siguiente:

location ^~ /.well-known/acme-challenge/ {
  allow all;
  default_type "text/plain";
  try_files $uri $uri/ /dev/null =404;
}

Con este código tendremos la excepción para cuando se llama a la validación de los certificados.

A continuación, deberemos ir al Administrador de archivos y eliminar todo lo que haya en la carpeta del httpdocs. Una vez esté vacío, crearemos un fichero .htaccess con el siguiente contenido.

Options -Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteRule (.*) https://www.dominio.es/$1 [R=301,L]

Las redirecciones son 3 bloques distintos. Esto, se hace así por el sistema del HSTS que, en caso de estar activado, hará que el navegador no devuelva un mensaje de error informando de una posible inseguridad.

El primero hace que el dominio sin-www mande el tráfico al mismo dominio sin-https.

RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

El segundo bloque valida que si el dominio tiene las www, pero está sin-https lo subamos a https.

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

Y, una vez el dominio tenga el https, lo mandaremos a la nueva dirección segura.

RewriteCond %{HTTPS} on
RewriteRule (.*) https://www.dominio.es/$1 [R=301,L]

La última línea es donde indicaremos el dominio al que, cuando se visite el dominio, se mandará el tráfico.

Con este sistema conseguiremos poder crear el certificado de Let’s Encrypt para el dominio, el wildcard (*.example.com) y los certificados para el correo.


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.