https://kevinbentlage.nl/blog/lets-encrypt-with-haproxy/
Запросить новый сертификат
Код: Выделить всё
certbot certonly --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 -d mydomain.com --email me@mydomain.com --agree-tos --non-interactive
--standalone – запустить автономный веб-сервер и прослушивать запросы проверки;
--preferred-challenges http – гарантирует, что certbot будет использовать запрос HTTP для проверки нашего запроса;
–http-01-address 127.0.0.1 – гарантирует, что автономный веб-сервер certbot будет прослушивать только locahost (127.0.0.1);
–http-01-port 9080 – гарантирует, что автономный веб-сервер certbot будет прослушивать порт 9080;
-d mydomain.com — домен, для которого нам нужен сертификат. Вы можете добавить несколько флагов -d , чтобы запросить несколько доменов в одном сертификате. Все домены, которые вы передаете, должны быть преобразованы в ваш HAProxy -сервер.
–email
me@mydomain.com — адрес электронной почты, который Lets Encrypt будет использовать для отправки вам уведомлений об истечении срока действия этого сертификата.
--agree-tos – соглашается с условиями использования без вмешательства пользователя.
–non-interactive – Запустите эту команду без вмешательства или ввода пользователя. Обычно, когда вы запускаете certbot, он предоставит вам всю вышеуказанную информацию.
Объединение сертификатов для HAProxy
Код: Выделить всё
#!/bin/bash
# Loop through all Let's Encrypt certificates
for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do
CERTIFICATE=`basename $CERTIFICATE`
# Combine certificate and private key to single file
cat /etc/letsencrypt/live/$CERTIFICATE/fullchain.pem /etc/letsencrypt/live/$CERTIFICATE/privkey.pem > /etc/haproxy/ssl/$CERTIFICATE.pem
done
Этот скрипт просматривает все существующие сертификаты Lets Encrypt в /etc/letsencrypt/live и объединяет отдельные файлы в один файл .pem . Этот файл .pem хранится в /etc/haproxy/ssl.
Теперь мы создали этот скрипт, можем сделать его исполняемым и запустить, чтобы подготовить уже запрошенный нами сертификат Lets Encrypt .
Код: Выделить всё
chmod +x /etc/haproxy/prepareLetsEncryptCertificates.sh
sh /etc/haproxy/prepareLetsEncryptCertificates.sh
Если вы посмотрите /etc/haproxy/ssl , вы найдете объединенный файл .pem. Когда вы снова перезагрузите haproxy, у вас должен быть работающий сертификат Lets Encrypt в вашей установке HAProxy !
Чтобы автоматизировать это, мы создаем второй скрипт bash в /etc/haproxy/renewLetsEncryptCertificates.sh.
Этот сценарий в основном вызывает обновление certbot, запускает ранее созданный сценарий объединения и перезагружает haproxy при успешном обновлении сертификата.
Код: Выделить всё
#!/bin/bash
certbot renew --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 --post-hook "/etc/haproxy/prepareLetsEncryptCertificates.sh && systemctl reload haproxy.service" --quiet
--standalone – запустить автономный веб-сервер и прослушивать запросы проверки;
--preferred-challenges http – гарантирует, что certbot будет использовать запрос HTTP для проверки нашего запроса;
–http-01-address 127.0.0.1 – гарантирует, что автономный веб-сервер certbot будет прослушивать только locahost (127.0.0.1);
–http-01-port 9080 – гарантирует, что автономный веб-сервер certbot будет прослушивать порт 9080;
--post-hook – команда, которая будет выполнена в случае успешного продления. Мы хотим запустить наш скрипт объединения и автоматически перезагружать HAProxy после каждого обновления;
–quiet – гарантирует, что команда будет выполняться без вывода сообщений.
Чтобы завершить автоматическое продление, мы создаем задание cron, которое запускает сценарий продления ежедневно до полуночи.
Код: Выделить всё
crontab -e
0 0 * * * /bin/sh /etc/haproxy/renewLetsEncryptCertificates.sh
С этого момента этот скрипт будет запускаться ежедневно, и когда certbot узнает, что срок действия некоторых сертификатов скоро истечет, он автоматически продлит их и запустит наш скрипт объединения. Благодаря этому весь процесс полностью автоматизирован.
Когда вы добавите дополнительные сертификаты, они также будут автоматически продлены без вашего вмешательства вручную