Назад | Перейти на главную страницу

Использование Lets Encrypt SSL для нескольких серверов Apache с распределенным трафиком

У меня возникли проблемы с настройкой Let's Encrypt для пары веб-сайтов, которые настроены на двух разных серверах, и трафик распределяется между ними через HAProxy.

На серверах есть несколько VHosts / доменов, для каждого из которых потребуются сертификаты SSL. Ради этого поста допустим, что они:

  1. foo.some-site.com
  2. bar.some-site.com

Обе эти записи A настроены с двумя IP-адресами. Я могу проверить с помощью nwtools.com или просто nslookup, что обе записи A foo.some-site.com и bar.some-site.com разрешить те же два IP-адреса. И я знаю, что Let's Encrypt требует, чтобы у vhost была действительная запись, чтобы он мог выполнять поиск.

Я планировал запустить настройку Lets Encrypt на обоих серверах для всех vhosts, и на одном из них она работала нормально, но когда я перешел на второй, я получил сообщение об ошибке:

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

Возможно ли это из-за того, что он выполняет поиск или пытается скрутить foo.some-site.com, и он может быть направлен на другой сервер? Я не уверен, какое это имеет значение, поскольку на обоих есть одинаковые VHosts, если только LetsEncrypt не прослушивает соединение, которое оно устанавливает ...

Что меня сбивает с толку, так это то, что у одного из них он отлично сработал (скажем, bar.some-site.com), так почему это должно работать для одного сайта, а не для другого с точно такой же настройкой?

Если кто-нибудь знает, как настроить Lets Encrypt для одних и тех же хостов на двух разных серверах, помощь будет очень признательна!

Возможно, это связано с тем, что он выполняет поиск или пытается свернуть foo.some-site.com и может быть перенаправлен на другой сервер?

Да, определенно.

LE необходимо подключиться обратно к серверу, на котором запущен клиент LE, как часть процесса запроса-ответа проверки домена. Не вдаваясь в подробности, клиент LE фактически временно делает определенный файл доступным на вашем веб-сервере, который сервер LE должен иметь возможность использовать для подтверждения владения доменом.

Выполнение этой команды на всех внутренних серверах необязательно и обременительно. Запустите его один раз, а затем скопируйте цепочку ключей и сертификатов на остальные внутренние серверы.

Что меня сбивает, так это то, что для одного из них он отлично сработал (скажем, bar.some-site.com), так почему он будет работать для одного сайта, но не работает для другого с той же настройкой?

Потому что тебе повезло? :) Возможно, ваш балансировщик нагрузки случайно направил запросы LE в нужное место один раз, но не сделал этого во второй раз.

Существует несколько подходов к сценариям, включающим несколько веб-серверов / серверов приложений / балансировщиков нагрузки. О некоторых из них вы можете прочитать в Официальное руководство по интеграции Let's Encrypt для больших помещений.

Есть несколько изящных способов сделать это, например:

  • перенаправление всех запросов на валидацию на один хост / пул хостов валидации
  • выполнение всего управления сертификатами в автономном режиме (то есть запрос, обновление и распространение ключей с вашего хоста управления, а не на ваших веб-серверах)

Что для вас имеет смысл, будет зависеть от ваших предпочтений и требований конкретной среды.