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”
Bueno, en mi caso activé el multisitio en devuan sobre nginx y no me resultó del todo porque la configuración está pensada para apache y no supe que hacer para comprobar si tenía lo equivalente en nginx. De hecho, creo que no puedo activar el plugin jetpack en el sitio hijo por esa razón :/
El que la sigue la consigue. 🙂
Lectura obligatoria. Varios dominios WordPress. A ponerse las pilas toca ya!.
Ha dejado de actualizarse el feed de feedburner desde hace meses.
Hola Pedro.
Gracias por avisar, lo estoy mirando ahora mismo. Hace algún tiempo nos pasó lo mismo pero lo solucionamos y creímos (ilusos) que ya no volvería a pasar.
En cuanto esté avisaremos a todos.
¡Muchas gracias!