Настройка 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;

Где 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;

}

Вместо того, чтобы каждый раз в новых конфигах не прописывать необходимые строки для получения сертификата, я сделал мини-конфиг, который я добавляю одной строчкой.

Сам конфиг должен располагаться в /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 для сайта будет выглядеть приблизительно так:
(как пример взял конфиг от Fluffychat)

server {
    server_name ffchat.sadium.cyou;
    include includes/301.conf;
}      

server {
    server_name ffchat.sadium.cyou;

   	location / {
   		proxy_pass http://localhost:9199;
   		proxy_set_header Host $host;
   		proxy_set_header X-Real-IP $remote_addr;
   		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   		proxy_set_header X-Forwarded-Proto $scheme;
   	}

    location /admin/ {
    	proxy_pass http://localhost:9198/;
    	proxy_set_header Host $host;
    	proxy_set_header X-Real-IP $remote_addr;
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	proxy_set_header X-Forwarded-Proto $scheme;
	}	

	location /invite/ {
    	proxy_pass http://localhost:5055/;
    	proxy_set_header Host $host;
    	proxy_set_header X-Real-IP $remote_addr;
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	proxy_set_header X-Forwarded-Proto $scheme;

    }	
	
	include includes/main_errors.conf;
	include includes/ssl.conf;

}

Проверяем, что всё ок командой

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 -R -m u:maddy:rX /var/lib/angie/acme/letsencrypt/certificate.pem
sudo setfacl -R -m u:maddy:rX /var/lib/angie/acme/letsencrypt/private.key

и всё должно заработать.