Apache: Como “ocultar” um subdomínio, mas servir por https

Apache: Como “ocultar” um subdomínio, mas servir por https

Admitirei abertamente a minha ignorância - ou talvez conhecimento suficiente para ser perigoso.

Eu tenho um subdomínio http://db.<mydomain>.comque atende ao utilitário phpMyAdmin. Atualmente está em um diretório com uma diretiva Apache para exigir um usuário válido do .htaccess, o que fazia sentido na época, porque não quero expor a página de login do phpMyAdmin ao público em geral.

O problema que isso criou foi tentar usar o cert-bot para criar certificados SSL para o meu site. Ele não consegue validar o desafio ACME porque o desafio não consegue superar a restrição .htaccess.

Como posso servir simultaneamente este subdomínio através de https e ao mesmo tempo exigir uma camada adicional de segurança antes que um usuário possa ver a página de login do 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>

Responder1

<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>

Você deve remover as diretivas Ordere Allow. Estas são as diretivas antigas do Apache 2.2 e foram anteriormente obsoletas no Apache 2.4 e provavelmente causarão conflitos (mas não são necessárias de qualquer maneira).

Embora curioso por que você tem uma <Directory>seção para /var/www/subdomains/db, ainda assim DocumentRooté definido como /var/www/subdomains/db/phpMyAdmin?

Em seguida, adicione uma <Directory>seção adicional para o /.well-known/caminho do arquivo na qual você permite acesso irrestrito - para que o certbot possa "validar o desafio ACME". Por exemplo:

<Directory "/var/www/subdomains/db/phpMyAdmin/.well-known">
    Require all granted
</Directory>

Responder2

Existem pelo menos três maneiras de resolver isso:

  1. Use oDesafio DNS, não exigindo conexão HTTP
  2. Desative a autenticação básica para .well-known/-pathque é usado pelo certbot.
  3. Use o módulo autônomo do certbot. Isso levará a 10-20 segundos de tempo de inatividade

Responder3

Uma maneira possível é adicionar restrições de acesso ao host virtual assim:

<Directory "/www/docs/db">
    <RequireAll>
        Require ip <localip> <certbot host-name>
    </RequireAll>
</Directory>

Para mais informações sobre Requirea diretiva você pode visitarDocumento Apache.

informação relacionada