Estou tendo alguns problemas para configurar o Let's Encrypt para alguns sites que estão configurados em dois servidores diferentes e têm o tráfego distribuído para eles via HAProxy.
Os servidores têm vários VHosts/domínios neles, todos precisando de certificados SSL. Para o bem deste post, digamos que eles são:
- foo.some-site.com
- bar.some-site.com
Ambos os registros A são configurados com dois endereços IP. Posso verificar com nwtools.com ou apenas nslookup se ambos os registros A foo.some-site.com e bar.some-site.com resolvem os mesmos dois endereços IP. E eu sei que o Let's Encrypt requer que o vhost tenha um registro válido usado para que ele possa fazer uma pesquisa.
Planejei executar a configuração do Lets Encrypt em ambos os servidores para todos os vhosts e funcionou bem para um deles, mas quando mudei para o segundo, recebi um erro:
[root@server httpd]# /opt/letsencrypt/letsencrypt-auto --apache -d foo.some-site.com
Checking for new version...
Requesting root privileges to run letsencrypt...
/root/.local/share/letsencrypt/bin/letsencrypt --apache -d foo.some-site.com
Failed authorization procedure. foo.some-site.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Failed to connect to host for DVSNI challenge
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: foo.some-site.com
Type: connection
Detail: Failed to connect to host for DVSNI challenge
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A record(s) for that domain
contain(s) the right IP address. Additionally, please check that
your computer has a publicly routable IP address and that no
firewalls are preventing the server from communicating with the
client. If you're using the webroot plugin, you should also verify
that you are serving files from the webroot path you provided.
Isso poderia ser porque está fazendo uma pesquisa ou tentando enrolar foo.some-site.com e pode estar sendo direcionado para o outro servidor? Não tenho certeza de como isso realmente importaria, já que ambos têm os mesmos VHosts neles, a menos que LetsEncrypt esteja realmente ouvindo a conexão que está se fazendo ...
O que está me confundindo é que funcionou bem para um deles (digamos bar.some-site.com ), então por que funcionaria para um site, mas falharia para outro com exatamente a mesma configuração?
Se alguém souber uma maneira de configurar o Lets Encrypt para os mesmos vhosts em dois servidores diferentes, a ajuda seria muito apreciada!
Sim, definitivamente.
O LE precisa se conectar novamente ao servidor no qual você está executando o cliente LE, como parte do processo de resposta ao desafio de verificação de domínio. Sem entrar em detalhes, o cliente LE realmente disponibiliza um determinado arquivo em seu servidor web temporariamente que o servidor LE precisa ser capaz de consumir para verificar a propriedade do domínio.
A execução desse comando em todos os servidores de back-end é desnecessária e complicada. Execute-o uma vez e copie a chave e a cadeia de certificados para o restante dos servidores de back-end.
Porque você teve sorte? :) É possível que por acaso seu load balancer tenha direcionado as requisições LE para o local certo uma vez, mas não o tenha feito na segunda vez.
Existem várias abordagens para cenários envolvendo vários servidores web/aplicativos/balanceadores de carga. Você pode ler sobre alguns deles no Guia oficial de integração do Let's Encrypt para ambientes maiores.
Existem algumas maneiras legais de fazer isso, como:
O que faz sentido para você dependerá de suas preferências e de vários requisitos específicos do ambiente.