Admitiré libremente mi ignorancia, o quizás suficiente conocimiento para ser peligroso.
Tengo un subdominio http://db.<mydomain>.com
que sirve a la utilidad phpMyAdmin. Actualmente se encuentra en un directorio con una directiva de Apache que requiere un usuario válido de .htaccess, lo cual tenía sentido en ese momento, porque no quiero exponer la página de inicio de sesión de phpMyAdmin al público en general.
El problema que esto creó fue intentar usar cert-bot para crear certificados SSL para mi sitio, no puede validar el desafío ACME porque el desafío no puede superar la restricción .htaccess.
¿Cómo puedo servir simultáneamente este subdominio a través de https y al mismo tiempo requerir una capa adicional de seguridad antes de que un usuario pueda ver la página de inicio de sesión de phpMyAdmin?
<VirtualHost *:80>
ServerName db.<mydomain>.com
ServerAlias www.db.<mydomain>.com
DocumentRoot /var/www/subdomains/db/phpMyAdmin
</VirtualHost>
<Directory "/var/www/subdomains/db">
Options Indexes FollowSymLinks ExecCGI
Order allow,deny
Allow from all
AuthType Basic
AuthUserFile "/var/www/.htpasswd-users"
require valid-user
</Directory>
Respuesta1
<Directory "/var/www/subdomains/db"> Options Indexes FollowSymLinks ExecCGI Order allow,deny Allow from all AuthType Basic AuthUserFile "/var/www/.htpasswd-users" require valid-user </Directory>
Debes eliminar las directivas Order
y . Allow
Estas son las directivas de Apache 2.2 de estilo antiguo y anteriormente están en desuso en Apache 2.4 y es probable que causen conflictos (pero no son necesarias de todos modos).
Aunque es curioso por qué tiene una <Directory>
sección para /var/www/subdomains/db
, pero DocumentRoot
se define como /var/www/subdomains/db/phpMyAdmin
.
Luego agregue una <Directory>
sección adicional para la /.well-known/
ruta del archivo en la que permite el acceso sin restricciones, para que el certbot pueda "validar el desafío ACME". Por ejemplo:
<Directory "/var/www/subdomains/db/phpMyAdmin/.well-known">
Require all granted
</Directory>
Respuesta2
Hay al menos tres formas de resolver esto:
- Utilizar elDesafío DNS, que no requiere conexión HTTP
- Deshabilitar la autenticación básica para
.well-known/
-pathque es utilizado por certbot. - Utilice el módulo independiente de certbot. Esto provocará entre 10 y 20 segundos de tiempo de inactividad.
Respuesta3
Una forma posible es agregar restricciones de acceso para el host virtual de esta manera:
<Directory "/www/docs/db">
<RequireAll>
Require ip <localip> <certbot host-name>
</RequireAll>
</Directory>
Para más información sobre Require
directiva puedes visitardocumento apache.