HAProxy. Подключение TLS сертификатов LetsEncrypt с помощью ACME — различия между версиями
Root (обсуждение | вклад) (Новая страница: «SINGLE DOMAIN acme.sh installation apt install socat добавим пользака acme adduser --system --disabled-password --disabled-login --home /var/lib…») |
Root (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| − | |||
| − | |||
| − | |||
| − | + | '''SINGLE DOMAIN''' | |
| − | |||
| − | |||
| − | |||
| − | + | Заранее поставим socat | |
| − | + | apt install socat | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | Создаём пользователя | |
| − | + | adduser --system --disabled-password --disabled-login --home /var/lib/acme --quiet --force-badname --group acme | |
| − | sudo -u acme -s | + | |
| − | acme.sh --register-account --server letsencrypt -m | + | |
| − | + | Добавляем его группу haproxy | |
| − | Account key creation OK. | + | adduser acme haproxy |
| − | Registering account: https://acme-v02.api.letsencrypt.org/directory | + | |
| − | Registered | + | |
| − | ACCOUNT_THUMBPRINT='Xzcw32Ofoos72RlnlJnzPqOre2XzfnGP8Gu8xsWW8zc' | + | Создаём папку для acme |
| − | + | mkdir /usr/local/share/acme.sh/ | |
| + | |||
| + | |||
| + | Устанавливаем скрипт | ||
| + | git clone https://github.com/acmesh-official/acme.sh.git | ||
| + | cd acme.sh/ | ||
| + | ./acme.sh --install --no-cron --no-profile --home /usr/local/share/acme.sh (не обращаем внимание на варнинги) | ||
| + | ln -s /usr/local/share/acme.sh/acme.sh /usr/local/bin/ | ||
| + | chmod 755 /usr/local/share/acme.sh/ | ||
| + | |||
| + | |||
| + | Создадим аккаунт | ||
| + | sudo -u acme -s | ||
| + | acme.sh --register-account --server letsencrypt -m admin@iwad.ru | ||
| + | Account key creation OK. | ||
| + | Registering account: https://acme-v02.api.letsencrypt.org/directory | ||
| + | Registered | ||
| + | ACCOUNT_THUMBPRINT='Xzcw32Ofoos72RlnlJnzPqOre2XzfnGP8Gu8xsWW8zc' | ||
| − | |||
exit | exit | ||
| − | + | Правим конфиг haproxy.conf | |
| − | + | global | |
| − | global | ||
stats socket /var/run/haproxy/admin.sock level admin mode 660 | stats socket /var/run/haproxy/admin.sock level admin mode 660 | ||
setenv ACCOUNT_THUMBPRINT 'lCufto4sDRTHdmWL0EugFywGV54hBCuTTXvwifi65R4' | setenv ACCOUNT_THUMBPRINT 'lCufto4sDRTHdmWL0EugFywGV54hBCuTTXvwifi65R4' | ||
| − | + | ||
| − | frontend web | + | frontend web |
bind :80 | bind :80 | ||
bind :443 ssl crt /etc/haproxy/certs/ strict-sni | bind :443 ssl crt /etc/haproxy/certs/ strict-sni | ||
http-request return status 200 content-type text/plain lf-string "%[path,field(-1,/)].${ACCOUNT_THUMBPRINT}\n" if { path_beg '/.well-known/acme-challenge/' } | http-request return status 200 content-type text/plain lf-string "%[path,field(-1,/)].${ACCOUNT_THUMBPRINT}\n" if { path_beg '/.well-known/acme-challenge/' } | ||
| − | |||
| − | |||
| − | + | Генерируем сертификат | |
| − | sudo -u acme -s | + | sudo -u acme -s |
| + | acme.sh --issue -d haproxy.iwad.ru --stateless --server letsencrypt | ||
| − | |||
| − | + | Деплоим сертификат на сервер | |
| − | sudo -u acme -s | + | sudo -u acme -s |
| + | DEPLOY_HAPROXY_HOT_UPDATE=yes \ | ||
| + | DEPLOY_HAPROXY_STATS_SOCKET=/var/run/haproxy/admin.sock \ | ||
| + | DEPLOY_HAPROXY_PEM_PATH=/etc/haproxy/ssl \ | ||
| + | acme.sh --deploy -d iwad.ru --deploy-hook haproxy | ||
| − | + | Проверяем серт на хапроксе | |
| − | + | echo "show ssl cert /etc/haproxy/ssl/haproxy.iwad.ru" |\ | |
| − | + | socat /var/run/haproxy/admin.sock - | |
| − | |||
| − | + | Автопродление сертификата | |
| − | + | sudo -u acme -s | |
| − | + | acme.sh --install-cronjob | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | Проверяем что добавилась строчка | ||
| + | 21 3 * * * /usr/local/share/acme.sh/acme.sh --cron --home "/var/lib/acme/.acme.sh" > /dev/null | ||
| Строка 79: | Строка 79: | ||
https://github.com/acmesh-official/acme.sh/wiki/dnsapi#dns_cf | https://github.com/acmesh-official/acme.sh/wiki/dnsapi#dns_cf | ||
| − | export CF_Key="8025a22a233169a37e52c5949c258d30a6d0c" | + | export CF_Key="8025a22a233169a37e52c5949c258d30a6d0c" |
| − | export CF_Email="finn@megapuper.ru" | + | export CF_Email="finn@megapuper.ru" |
| − | |||
| − | |||
| + | acme.sh --issue -d *.pushads.biz --server letsencrypt --dns dns_cf | ||
| − | + | Деплоим серт на хапрокси | |
| − | DEPLOY_HAPROXY_HOT_UPDATE=yes \ | + | DEPLOY_HAPROXY_HOT_UPDATE=yes \ |
| − | DEPLOY_HAPROXY_STATS_SOCKET=/var/run/haproxy/admin.sock \ | + | DEPLOY_HAPROXY_STATS_SOCKET=/var/run/haproxy/admin.sock \ |
| − | DEPLOY_HAPROXY_PEM_PATH=/etc/haproxy/ssl \ | + | DEPLOY_HAPROXY_PEM_PATH=/etc/haproxy/ssl \ |
| − | acme.sh --deploy -d *. | + | acme.sh --deploy -d *.iwad.ru --deploy-hook haproxy |
| − | + | Проверяем на хапроксе | |
| − | echo "show ssl cert /etc/haproxy/ssl/_. | + | echo "show ssl cert /etc/haproxy/ssl/_.iwad.ru.pem" | socat /var/run/haproxy/admin.sock - |
Версия 21:37, 15 июля 2024
SINGLE DOMAIN
Заранее поставим socat
apt install socat
Создаём пользователя
adduser --system --disabled-password --disabled-login --home /var/lib/acme --quiet --force-badname --group acme
Добавляем его группу haproxy
adduser acme haproxy
Создаём папку для acme
mkdir /usr/local/share/acme.sh/
Устанавливаем скрипт
git clone https://github.com/acmesh-official/acme.sh.git cd acme.sh/ ./acme.sh --install --no-cron --no-profile --home /usr/local/share/acme.sh (не обращаем внимание на варнинги) ln -s /usr/local/share/acme.sh/acme.sh /usr/local/bin/ chmod 755 /usr/local/share/acme.sh/
Создадим аккаунт
sudo -u acme -s acme.sh --register-account --server letsencrypt -m admin@iwad.ru Account key creation OK. Registering account: https://acme-v02.api.letsencrypt.org/directory Registered ACCOUNT_THUMBPRINT='Xzcw32Ofoos72RlnlJnzPqOre2XzfnGP8Gu8xsWW8zc'
exit
Правим конфиг haproxy.conf
global
stats socket /var/run/haproxy/admin.sock level admin mode 660
setenv ACCOUNT_THUMBPRINT 'lCufto4sDRTHdmWL0EugFywGV54hBCuTTXvwifi65R4'
frontend web
bind :80
bind :443 ssl crt /etc/haproxy/certs/ strict-sni
http-request return status 200 content-type text/plain lf-string "%[path,field(-1,/)].${ACCOUNT_THUMBPRINT}\n" if { path_beg '/.well-known/acme-challenge/' }
Генерируем сертификат
sudo -u acme -s acme.sh --issue -d haproxy.iwad.ru --stateless --server letsencrypt
Деплоим сертификат на сервер
sudo -u acme -s DEPLOY_HAPROXY_HOT_UPDATE=yes \ DEPLOY_HAPROXY_STATS_SOCKET=/var/run/haproxy/admin.sock \ DEPLOY_HAPROXY_PEM_PATH=/etc/haproxy/ssl \ acme.sh --deploy -d iwad.ru --deploy-hook haproxy
Проверяем серт на хапроксе
echo "show ssl cert /etc/haproxy/ssl/haproxy.iwad.ru" |\ socat /var/run/haproxy/admin.sock -
Автопродление сертификата
sudo -u acme -s acme.sh --install-cronjob
Проверяем что добавилась строчка
21 3 * * * /usr/local/share/acme.sh/acme.sh --cron --home "/var/lib/acme/.acme.sh" > /dev/null
WILDCARD
https://github.com/acmesh-official/acme.sh/wiki/dnsapi#dns_cf
export CF_Key="8025a22a233169a37e52c5949c258d30a6d0c" export CF_Email="finn@megapuper.ru"
acme.sh --issue -d *.pushads.biz --server letsencrypt --dns dns_cf
Деплоим серт на хапрокси
DEPLOY_HAPROXY_HOT_UPDATE=yes \ DEPLOY_HAPROXY_STATS_SOCKET=/var/run/haproxy/admin.sock \ DEPLOY_HAPROXY_PEM_PATH=/etc/haproxy/ssl \ acme.sh --deploy -d *.iwad.ru --deploy-hook haproxy
Проверяем на хапроксе
echo "show ssl cert /etc/haproxy/ssl/_.iwad.ru.pem" | socat /var/run/haproxy/admin.sock -