Apache: Cómo "ocultar" un subdominio pero servir a través de https

Apache: Cómo "ocultar" un subdominio pero servir a través de https

Admitiré libremente mi ignorancia, o quizás suficiente conocimiento para ser peligroso.

Tengo un subdominio http://db.<mydomain>.comque 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 Ordery . AllowEstas 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 DocumentRootse 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:

  1. Utilizar elDesafío DNS, que no requiere conexión HTTP
  2. Deshabilitar la autenticación básica para .well-known/-pathque es utilizado por certbot.
  3. 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 Requiredirectiva puedes visitardocumento apache.

información relacionada