SSL для приложения SaaS
Как я могу использовать Lets encrypt cert manger с Ha-proxy loadbalancer? Мне нужно реализовать службу функций пользовательского домена в моем приложении SaaS. Все работает нормально, кроме SSL. Как я могу реализовать? Использование Haproxy в качестве балансировщика нагрузки.
2 ответа
Пытался определить шаги. Уменьшено из более крупного скрипта, если у вас есть ошибка, напишите здесь, чтобы исправить это.
Предпосылки:
- установлен haproxy, например здесь: ip - 200.200.200.200
- домен dns получен и направлен на haproxy, например здесь: test.com
- http работает, если это работает, то работает вся веб-цепочка
- установлен letsencrypt и есть учетная запись
- можно остановить haproxy и закрыть сайт
Шаги:
очистить старые папки в / etc / letsencrypt, которые находятся с test.com
rm -rf *test.com*
остановить haproxy
Команда 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
проверь, все ли в порядке
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
создайте папки /etc/letsencrypt/live/www.test.com и etc / letsencrypt / live / test.com
создать файлы ссылок на файлы архива
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
- скопируйте сертификат на haproxy
cat fullchain.pem privatekey.pem > /etc/haproxy/ssl/test.com-fullchain.pem
то же самое для www
- добавить в 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-интерфейса
- перезапустите haproxy, проверьте, активен ли сертификат
Чтобы проверить, чтобы увидеть дату истечения срока действия сертификата: Введите
openssl x509 -enddate -noout -in test.com-fullchain.pem
ЧТО ДЕЛАТЬ: Не описано, как обновить сценарий, надеюсь сделать это в будущем
Вот возможное решение. На мой взгляд, тем проще. Он использует Haproxy Community и клиент Certbot.
Установите клиент Certbot на отдельный сервер и разработайте REST API для взаимодействия с клиентом. Здесь вы сможете интегрировать свое приложение с Certbot для создания сертификатов.
Создайте каталог на сервере HAproxy для хранения сертификатов. Установите NFS на сервер и смонтируйте этот каталог на сервере Certbot. При создании сертификатов с помощью Certbot разверните в эту точку монтирования.
Создайте сценарий развертывания для Certbot, чтобы он перезагружал службу Haproxy при развертывании нового сертификата.
Запланируйте задачу на сервере Certbot, чтобы она запускала процесс обновления один раз в день.
Если вам не нравится клиент Certbot, вы можете разработать его самостоятельно. Я сейчас разрабатываю его на Scala для интеграции с моей платформой электронной коммерции, это не так уж и сложно.