Admitirei abertamente a minha ignorância - ou talvez conhecimento suficiente para ser perigoso.
Eu tenho um subdomínio http://db.<mydomain>.com
que 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 Order
e 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:
- Use oDesafio DNS, não exigindo conexão HTTP
- Desative a autenticação básica para
.well-known/
-pathque é usado pelo certbot. - 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 Require
a diretiva você pode visitarDocumento Apache.