SSL для приложения SaaS

Как я могу использовать Lets encrypt cert manger с Ha-proxy loadbalancer? Мне нужно реализовать службу функций пользовательского домена в моем приложении SaaS. Все работает нормально, кроме SSL. Как я могу реализовать? Использование Haproxy в качестве балансировщика нагрузки.

2 ответа

Пытался определить шаги. Уменьшено из более крупного скрипта, если у вас есть ошибка, напишите здесь, чтобы исправить это.

Предпосылки:

  1. установлен haproxy, например здесь: ip - 200.200.200.200
  2. домен dns получен и направлен на haproxy, например здесь: test.com
  3. http работает, если это работает, то работает вся веб-цепочка
  4. установлен letsencrypt и есть учетная запись
  5. можно остановить haproxy и закрыть сайт

Шаги:

  1. очистить старые папки в / etc / letsencrypt, которые находятся с test.com rm -rf *test.com*

  2. остановить haproxy

  3. Команда Run:

    certbot certonly --standalone --preferred-challenges http --http-01-port 80 -d test.com

    certbot certonly --standalone --preferred-challenges http --http-01-port 80 -d www.test.com

  4. проверь, все ли в порядке

    root@200.200.200.200:/etc/letsencrypt/renewal# cat www.test.com.conf

должно быть:

#renew_before_expiry = 30 days
version = 0.22.2
archive_dir = /etc/letsencrypt/archive/www.test.com
cert = /etc/letsencrypt/live/www.test.com/cert.pem
privkey = /etc/letsencrypt/live/www.test.com/privkey.pem
chain = /etc/letsencrypt/live/www.test.com/chain.pem
fullchain = /etc/letsencrypt/live/www.test.com/fullchain.pem

# Options used in the renewal process
[renewalparams]
http01_port = 80
installer = None
pref_challs = http-01,
account = YOUR_ACCOUNT
authenticator = standalone
  1. создайте папки /etc/letsencrypt/live/www.test.com и etc / letsencrypt / live / test.com

  2. создать файлы ссылок на файлы архива

ln -s ../../archive/test.com/cert1.pem cert.pem
ln -s ../../archive/test.com/chain1.pem chain.pem
ln -s ../../archive/test.com/fullchain1.pem fullchain.pem
ln -s ../../archive/test.com/privkey1.pem privatekey.pem
  1. скопируйте сертификат на haproxycat fullchain.pem privatekey.pem > /etc/haproxy/ssl/test.com-fullchain.pem

то же самое для www

  1. добавить в haproxy интерфейс ssl
frontend test_com_ssl
  bind *:443 ssl crt /etc/haproxy/ssl/ ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

  default_backend test_com

бэкэнд может быть таким же, как и для http-интерфейса

  1. перезапустите haproxy, проверьте, активен ли сертификат

Чтобы проверить, чтобы увидеть дату истечения срока действия сертификата: Введите

openssl x509 -enddate -noout -in test.com-fullchain.pem

ЧТО ДЕЛАТЬ: Не описано, как обновить сценарий, надеюсь сделать это в будущем

Вот возможное решение. На мой взгляд, тем проще. Он использует Haproxy Community и клиент Certbot.

  1. Установите клиент Certbot на отдельный сервер и разработайте REST API для взаимодействия с клиентом. Здесь вы сможете интегрировать свое приложение с Certbot для создания сертификатов.

  2. Создайте каталог на сервере HAproxy для хранения сертификатов. Установите NFS на сервер и смонтируйте этот каталог на сервере Certbot. При создании сертификатов с помощью Certbot разверните в эту точку монтирования.

  3. Создайте сценарий развертывания для Certbot, чтобы он перезагружал службу Haproxy при развертывании нового сертификата.

  4. Запланируйте задачу на сервере Certbot, чтобы она запускала процесс обновления один раз в день.

Если вам не нравится клиент Certbot, вы можете разработать его самостоятельно. Я сейчас разрабатываю его на Scala для интеграции с моей платформой электронной коммерции, это не так уж и сложно.

Другие вопросы по тегам