HAProxy. Подключение TLS сертификатов LetsEncrypt с помощью ACME — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
Строка 37: Строка 37:
 
  Registered
 
  Registered
 
  ACCOUNT_THUMBPRINT='ItRz8wdo6Xo5zEmwJlZcVpLckTZHGg6pYSuwaZ-'
 
  ACCOUNT_THUMBPRINT='ItRz8wdo6Xo5zEmwJlZcVpLckTZHGg6pYSuwaZ-'
 +
 +
 +
Создаём директорию для сертификатов
 +
mkdir /etc/haproxy/ssl
 +
chown haproxy:haproxy /etc/haproxy/ssl
 +
chmod 770 /etc/haproxy/ssl
  
  
Строка 45: Строка 51:
 
   
 
   
 
  frontend web
 
  frontend web
    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/' }
 +
stats socket - активирует API, которое позволяет загрузить сертификат в runtime memory хапрокси
 +
strict-sni - разрешает запустить хапрокси с пустой директорией /etc/haproxy/ssl (когда ещё нет сертификатов)
 +
%[path,field(-1,/)] - использует случайную строку Let’s Encrypt, отправленную в рамках запроса HTTP-01
  
  

Версия 23:23, 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='ItRz8wdo6Xo5zEmwJlZcVpLckTZHGg6pYSuwaZ-'


Создаём директорию для сертификатов

mkdir /etc/haproxy/ssl
chown haproxy:haproxy /etc/haproxy/ssl
chmod 770 /etc/haproxy/ssl


Правим конфиг haproxy.conf

global
   stats socket /var/run/haproxy/admin.sock level admin mode 660
   setenv ACCOUNT_THUMBPRINT 'ItRz8wdo6Xo5zEmwJlZcVpLckTZHGg6pYSuwaZ-'

frontend web
   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/' }

stats socket - активирует API, которое позволяет загрузить сертификат в runtime memory хапрокси strict-sni - разрешает запустить хапрокси с пустой директорией /etc/haproxy/ssl (когда ещё нет сертификатов) %[path,field(-1,/)] - использует случайную строку Let’s Encrypt, отправленную в рамках запроса HTTP-01


Генерируем сертификат

sudo -u acme -s
acme.sh --issue -d haproxy.iwad.ru --stateless --server letsencrypt
exit


Деплоим сертификат на сервер

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
exit


Проверяем серт на хапроксе

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


Получаем сертификат

sudo -u acme -s
export CF_Key=""
export CF_Email="admin@iwad.ru"
acme.sh --issue -d *.iwad.ru --server letsencrypt --dns dns_cf


Деплоим серт на хапрокси

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
exit


Проверяем на хапроксе

echo "show ssl cert /etc/haproxy/ssl/_.iwad.ru.pem" | socat /var/run/haproxy/admin.sock -


https://github.com/acmesh-official/acme.sh/wiki/dnsapi#dns_cf