WordPress Multisite, Let’s Encrypt Wildcard y dominios redirigidos

Inciso: Dabo, te lo dije, te advertí que no pararía hasta terminar sabiendo cómo hacer funcionar esto 🙂

Tengo varias web, varios WordPress y un puñado de dominios. Es, creo yo, lo habitual cuando te mueves por estas aguas y a cada proyecto, idea o viaje místico le asocias un dominio y un espacio en internet. La mayoría no llega a ningún sitio pero eso no es lo importante. Al final, te juntas con un puñado de webs en un WordPress Multisite, con varios dominios apuntando a varios de sus subdominios y con unas ganas locas de ponerles a todas un bonito certificado SSL patrocinado por Let’s Encrypt.

El escenario

example.com es el dominio principal de un WordPress Multisite que alberga una veintena de webs en su propio subdominio, loquesea.example.com y, algunas de ellas, además, tienen un dominio propio que apunta al subdominio. Así tenemos, por ejemplo, example1.com que apunta a ex1.example.com y example2.net que apunta a ex2net.example.com.

Y un día quieres que todos los dominios tengan su propio certificado de Let’s Encrypt y es un problema porque como todos los subdominios dependen del mismo dominio principal y Let’s Encrypt no soporta wildcards, no hay mucho que hacer.

Así que te planteas hacer que sea Apache (2.4) el que se coma el marrón y te pones a mirar cómo hacerlo. El VirtualHost ya tiene declarado el dominio y los subdominios y también cuenta con el certificado para si mismo. Y no encontré la forma de meterle el resto de certificados, ni declarando otros VirtualHosts para que cada dominio tuviese su certificado, ni de ninguna forma.

Al final lo dejas por un tiempo porque no, ni apache es la solución ni Let’s Encrypt soporta wildcards y ya estás bastante cansado de batallar con molinos multisite.

La solución

El 13 de marzo, con dos meses de retraso sobre la fecha previstas, Let’s Encrypt anuncia que soporta wildcards y empiezas con las pruebas.

Primero, el VirtualHost de apache debe reconocer todos y cada uno de los dominios y subdominios, incluídos los dominios asociados:

grep ServerAlias /etc/apache2/sites-enabled/example.com.conf
    ServerAlias *.example.com ex1.example.com example1.com ex2net.example.com example2.net

Luego, se invoca a cerbot con los parámetros adecuados:

sudo certbot certonly \
  --server https://acme-v02.api.letsencrypt.org/directory \
  --manual \
  --preferred-challenges dns-01 \
  -d example.com \
  -d *.example.com \
  -d example1.com \
  -d example2.net

Con el parámetro --manual deberemos añadir un registro TXT _acme-challenge con una clave al DNS de cada uno de los dominios especificados para que sean capaces de comprobar que realmente eres el propietario del dominio.

Los dominios a incluir en el certificado se especifican por separado, todos ellos, con un -d, incluyendo el wildcard para los subdominios de example.com.

Se cambia la declaración del certificado porque es un fichero diferente, se reinicia apache y esta parte está lista. Cada dominio y subdominio tiene un certificado nominal válido, firmado por Let’s Encrypt y se puede acceder a cada uno, por HTTP y HTTPS.

En WordPress es una buena idea activar el plugin Really Simple SSL que convierte todas las peticiones HTTP en HTTPS para que todo el contenido esté cifrado.

Bonus track: redirigir las peticiones HTTP a HTTPS

Añadir estas pocas líneas al VirtualHost de apache:

    # Force HTTPS
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Sólo he necesitado un año y pico y que Let’s Encrypt admitiese los wildcard para poder tener los dominios funcionando a mi gusto. Y si, seguro que hay una docena (o más) de mejores formas de hacerlo pero, sinceramente, no he encontrado ninguna otra.

5 ideas sobre “WordPress Multisite, Let’s Encrypt Wildcard y dominios redirigidos”

Los comentarios están cerrados.

Sentimos molestarte con lo de las Cookies, pero es por imperativo legal. Puedes ver aquí la Política de Cookies, si continúas navegando te informo que la estás aceptando ;)    Ver
Privacidad