Настройка ACME для получения сертификатов в Angie (+Maddy)
Angie⌗
Этот мануал написан на основе другого мануала.
Только я Docker’ом не пользуюсь, только bare-metal, только хардкор.
Для тех кто в танке - Angie это форк nginx. Историю появления ищите сами.
Што ш, начнём.
Для начала, в конфиге Angie в конце блока http
добавляем следующие строчки:
acme_client letsencrypt https://acme-v02.api.letsencrypt.org/directory;
resolver 192.168.50.185;
map $acme_cert_letsencrypt $cert_letsencrypt {
'' /etc/angie/ssl-self-signed/cert.pem;
default $acme_cert_letsencrypt;
}
map $acme_cert_letsencrypt $cert_key_letsencrypt {
'' /etc/angie/ssl-self-signed/key.pem;
default $acme_cert_key_letsencrypt;
}
Где 192.168.50.185
это DNS сервер. Вы ставьте свой, например Quad9, 9.9.9.9
.
То есть, по итогу у нас должно получиться вот так:
http {
# здесь будут другие параметры
acme_client letsencrypt https://acme-v02.api.letsencrypt.org/directory;
resolver 192.168.50.185;
map $acme_cert_letsencrypt $cert_letsencrypt {
'' /etc/angie/ssl-self-signed/cert.pem;
default $acme_cert_letsencrypt;
}
map $acme_cert_letsencrypt $cert_key_letsencrypt {
'' /etc/angie/ssl-self-signed/key.pem;
default $acme_cert_key_letsencrypt;
}
}
Теперь делаем самоподписанный ключ для того, чтобы он потом заменился на полученный сертификат:
Для этого делаем папку /etc/angie/ssl-self-signed
, см. блок выше и создаём ключ:
mkdir /etc/angie/ssl-self-signed
cd /etc/angie/ssl-self-signed
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 3650 -nodes -subj "/C=RU/O=MyCompany/CN=MyProject"
Вместо того, чтобы каждый раз в новых конфигах не прописывать необходимые строки для получения сертификата, я сделал мини-конфиг, который я добавляю одной строчкой.
Сам конфиг должен располагаться в /etc/angie/includes
, я его назвал ssl.conf
listen 443 ssl;
acme letsencrypt;
ssl_certificate $acme_cert_letsencrypt;
ssl_certificate_key $acme_cert_key_letsencrypt;
Помимо этого я сделал ещё один мини-конфиг, чтобы Angie принудительно HTTP запросы переводил в HTTPS, назвал 301.conf
return 301 https://$host$request_uri;
И эти мини-конфиги я добавляю в конфиг сайта строчкой
include includes/ssl.conf # ну или другое имя после includes/
Среднестатистический конфиг Angie для сайта будет выглядеть приблизительно так:
(как пример взял конфиг от Elk)
server {
server_name elk.sadium.cyou;
gzip on;
gzip_types text/plain application/xml text/css application/javascript;
gzip_min_length 1000;
location / {
proxy_pass http://localhost:5050;
proxy_redirect off;
proxy_read_timeout 1m;
proxy_connect_timeout 1m;
include includes/headers.conf;
}
include includes/errors.conf;
include includes/ssl.conf;
}
server {
include includes/301.conf;
server_name elk.sadium.cyou;
}
Проверяем, что всё ок командой
angie -t
А если не ок, то чиним, пока не избавимся от ошибок 🙃
angie: the configuration file /etc/angie/angie.conf syntax is ok
angie: configuration file /etc/angie/angie.conf test is successful
Пару раз поперезагружайте страничку, сначала будет ругаться, но через полминуты где-то сертификат таки получит.
Сертификаты будут лежать по пути /var/lib/angie/acme/letsencrypt
.
Maddy⌗
Поскольку у меня есть почтовый сервер на базе Maddy, в его конфиге нужно заменить строчку
tls file /etc/letsencrypt/live/$(primary_domain)/fullchain.pem /etc/letsencrypt/live/$(primary_domain)/privkey.pem
на
tls file /var/lib/angie/acme/letsencrypt/certificate.pem /var/lib/angie/acme/letsencrypt/private.key
и дать Maddy доступ к сертификатам
sudo setfacl -m u:maddy:rX /var/lib/angie/acme/letsencrypt/certificate.pem
и
sudo setfacl -m u:maddy:rX /var/lib/angie/acme/letsencrypt/private.key
и всё должно заработать.
!ВАЖНО!
Обновление сертификатов ещё не происходило. Не знаю чо будет 🙃, но если всё упадёт, будет смищно.
Уберу эти строки через несколько месяцев, если всё пройдёт хорошо.