Tự động gia hạn Lets Encrypt Certificate trên HA Proxy không cần stop dịch vụ

0
2529

Như trong bài trước  nói về việc tạo, gia hạn Lets encrypt cert trên môi trường nginx không cần stop nginx.

Việc gia hạn trên HAProxy sẽ sử dụng cách standalone, nghĩa là Certbot sẽ tạo 1 web service ảo và cần chiếm port 443.

Để không cần stop Haproxy  ta chỉ cần hướng các request tới link https://domain.com/.well-known (link để Lets kiểm tra việc gia hạn) sang port khác, VD port 54321 để tránh trùng.

Ngay sau phần front_end_https thêm đoạn sau:

Lưu ý: do haproxy đọc acl từ trên xuống dưới, nên đoạn này phải để ngay sau front_end_https

 acl letsencrypt-acl path_beg /.well-known/acme-challenge/
    use_backend letsencrypt-backend if letsencrypt-acl

Tạo một backend điều hướng link trên sang port 54321:

backend letsencrypt-backend
        mode            http
        server letsencrypt 127.0.0.1:54321

Bây giờ tạo, renew cert bình thường không cần stop HAproxy

Tạo cert dùng câu lệnh:

sudo ./letsencrypt-auto certonly --standalone --preferred-challenges http --http-01-port 54321 -d domain.com

Sau khi tạo/renew cần ghép 2 file fullchain.pem và privkey.pem vào để haproxy sử dụng:

sudo DOMAIN='domain.com' sudo -E bash -c 'cat /etc/letsencrypt/live/$DOMAIN/fullchain.pem /etc/letsencrypt/live/$DOMAIN/privkey.pem > /etc/haproxy/certs/$DOMAIN.pem'

Restart HAProxy

Gia hạn tự động:

Dùng script sau để auto việc gia hạn trên haproxy:

#!/bin/bash

# Renew certificate for all domain
certbot renew

# Directory of letsencrypt certificate
LET_CERT=/etc/letsencrypt/live

# Domain list
domain_list=('domain1.com' 'domain2.com' 'domainn.com')

for DOMAINS in ${domain_list[@]}

do

# Cat the certificate chain and the private key together for haproxy config:
cat $LET_CERT/$DOMAINS/{fullchain.pem,privkey.pem} > /etc/haproxy/certs/${DOMAINS}.pem

done

# Reload the haproxy daemon to activate the cert
systemctl reload haproxy

Đặt cronjob để chạy script này:

0 0 1 */1 * /path/to/srcipt_file

 

 

LEAVE A REPLY

Please enter your comment!
Please enter your name here