Skip to content

Cài đặt Cerbot Let’s Encrypt Client để tạo chứng chỉ SSL Let’s Encrypt tự động

yum -y install epel-release
# -- For Apache
yum -y install certbot python2-certbot-apache mod_ssl
# -- For Nginx
yum -y install certbot-nginx
# -- For Haproxy (không có loại riêng)
yum -y install certbot

Lưu ý: Bạn phải đảm bảo domain đã được trỏ về IP máy chủ ( Nếu cài đặt SSL cho cả www.domain.com thì sub www cũng phải trỏ về máy chủ nhé)

File chứng chỉ SSL

Sau khi đã nhận được chứng chỉ, bạn sẽ nhận được các file được mã hóa PEM bao gồm:

  • cert.pem: Chứng chỉ của tên miền
  • chain.pem: Chuỗi chứng chỉ từ Let’s Encrypt
  • fullchain.pem: Kết hợp của cert.pem và chain.pem
  • privkey.pem: Khóa riêng tư của chứng chỉ

Để sử dụng chứng chỉ này trong cấu hình máy chủ web, bạn cần nhớ vị trí mà bạn đã lưu chúng.

SSL for Apache or Nginx

# -- Ví dụ đăng ký tên miền azdigi.cf
# -- QUAN TRỌNG! Tên miền đầu tiên sẽ là tên miền nền của bạn, trong trường hợp này là azdigi.cf
# -- For apache
certbot --apache -d azdigi.cf -d www.azdigi.cf
# -- For Nginx
certbot --nginx -d azdigi.cf -d www.azdigi.cf

``` [root@template conf.d]# certbot --apache -d azdigi.cf -d www.azdigi.cf Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): (Nhập email của bạn) Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org


Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server. Do you agree?


(Y)es/(N)o: Y (Nhấn Y để đồng ý điều khoản)


Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom.


(Y)es/(N)o: N (Nhấn N để từ chối các thông tin, tin tức từ letsencrypt và Certbot ) Account registered. Requesting a certificate for azdigi.cf and www.azdigi.cf


Cleaning up challenges Created an SSL vhost at /etc/httpd/conf.d/azdigi.cf-le-ssl.conf Deploying Certificate to VirtualHost /etc/httpd/conf.d/azdigi.cf-le-ssl.conf Redirecting vhost in /etc/httpd/conf.d/azdigi.cf.conf to ssl vhost in /etc/httpd/conf.d/azdigi.cf-le-ssl.conf


```

Như vậy đã cài đặt thành công SSL thông qua Certbot, đường đẫn lưu file chứng chỉ của website sẽ nằm tại đường dẫn tương ứng. Các file .conf cấu hình ssl cũng được tạo ra và đưa vào thư mục cấu hình Apache, Nginx

- VirtualHost For Apache: /etc/httpd/conf.d/azdigi.cf-le-ssl.conf
- VirtualHost For Nginx: /etc/nginx/conf.d/default.conf
- Certificate: /etc/letsencrypt/live/azdigi.cf/fullchain.pem
- Private Key: /etc/letsencrypt/live/azdigi.cf/privkey.pem 

Gia hạn SSL Let’s Encrypt for Apache or Nginx

Chứng chỉ Let’s Encrypt chỉ có hiệu lực trong 90 ngày và thường được lưu tại thư mục /etc/letsencrypt/live , các bạn có thể gia hạn thủ công hoặc thiết lập cronjob để làm việc đó. certbot sẽ đọc thư mục /etc/letsencrypt/live/* và tự động gia hạn toàn bộ cert domain trong đó.

# -- Gia hạn thủ công
certbot renew --dry-run
# -- Thêm Cronjob để gia hạn tự động
export VISUAL=nano; crontab -e
# -- Thêm dòng vào file crontab
00 6 * * * /usr/bin/certbot renew --quiet

Chú thích: Cronjob này có nghĩa là cứ đúng 6:00 AM nó sẽ check chứng chỉ nếu chứng chỉ hết hạn sẽ tự động gia hạn, ngược lại nếu còn hạn sẽ không thực hiện gia hạ.. Option --quiet báo Certbot không được suất ra thông tin hoặc là đợi để người dùng nhập thông tin vào.

Kiểm tra chứng chỉ SSL

Chúng ta có thể truy cập ssllabs.com để kiểm tra chứng chỉ online

HAProxy với Certbot Let’s Encrypt Client

Với HAProxy, quá trình cài đặt phức tạp hơn, và khi renew SSL yêu cầu phải restart HAProxy server. Với phiên bản HAProxy mới hơn (version > 2.2) kết hợp với acem.sh đã không yêu cầu restart làm gián đoạn hoạt động server.

# -- Cài đặt certbot
yum -y install epel-release
yum -y install certbot

Tạo New letsencrypt certificate bằng certbot

Nếu muốn tạo certificate và cấu hình haproxy, chúng ta cần cấp phép cho LetsEncrypt. Khi đó cần thiết lập một site stand-alone để listen khi ủy quyền cho LetsEncrypt.

Khi yêu cầu một certificate từ LetsEncrypt, nó sẽ yêu cầu được truy cập vào tệp tin được ủy quyền theo dạng đường dẫn “http://your-domain/well-known/acme-challenge/” và đường dẫn này bind đến cổng 80 cho yêu cầu http và 443 cho https. Nên chúng ta phải stop HAproxy và kiểm tra cổng 80 có trống hay không

# -- Stop HAProxy
sudo systemctl stop haproxy
# -- Kiểm tra cổng 80
netstat -na | grep ‘:80.*LISTEN’
# -- Tạo SSL cho mymusic.vn với email ...
certbot certonly --standalone -d mymusic.vn -d www.mymusic.vn --non-interactive --agree-tos --email keepwalking86@mymusic.vn

–standalone: Sử dụng chế độ standalone để đạt một certificate khi chúng ta không muốn sử dụng hoặc không có web server đang tồn tại. Sử dụng standalone, chúng ta kết hợp gồm lệnh “certonly

-d mymusic.vn: chỉ định public domain hợp lệ “mymusic.vn” mà trỏ bản ghi “A” vào địa chỉ IP Public của haproxy. Tùy chọn “-d” có thể được sử dụng cho nhiều domain và yêu cầu cùng một certificate.

–non-interactive –agree-tos –email keepwalking86@mymusic.vn: Cho phép xác nhận các điều khoản, cũng như vào thông tin email tự động khi LetsEncrypt yêu cầu

Sau khi kết thúc quá trình nhận certificate cho site mymusic.vn từ LetsEncrypt thành công, khi đó thư mục chứa các tệp certificate, key nằm ở /etc/letsencrypt/live/mymusic.vn/. Sau khi đã nhận được chứng chỉ, bạn sẽ nhận được các file được mã hóa PEM bao gồm:

  • cert.pem: Chứng chỉ của tên miền
  • chain.pem: Chuỗi chứng chỉ từ Let’s Encrypt
  • fullchain.pem: Kết hợp của cert.pem và chain.pem
  • privkey.pem: Khóa riêng tư của chứng chỉ

Mở rộng key và cert thành tệp pem

Tệp pem là tệp tin chứa định dạng có thể chỉ public certificate hoặc có thể gồm tập public key, private key và root certificate kết hợp với nhau. Chúng ta thực hiện nối private key và certificate ở trên để tạo thành tệp pem.

cd /etc/letsencrypt/live/mymusic.vn/
cat fullchain.pem privkey.pem | tee mymusic.vn.pem

Cấu hình HAProxy sử dụng LetsEncrypt SSL

Phần frontend

## -- Frontend section
frontend http-in
        bind *:80
        # listen port cho https với port default là 443, không sử dụng giao thức sslv3
    bind *:443 ssl no-sslv3 crt /etc/letsencrypt/live/mymusic.vn/mymusic.vn.pem
    # redirect toàn bộ http sang https
    # redirect scheme https if !{ ssl_fc }
    # HAProxy chỉ sử dụng HTTPS, nó sẽ tự động redirect đến https nếu gặp http://mymusic.vn
    redirect scheme https if { hdr(Host) -i mymusic.vn } !{ ssl_fc } 
    acl mymusic-acl hdr(host) -i mymusic.vn
    use_backend mymusic if mymusic-acl

Phần Backend

## -- Backend section
backend mymusic
        balance roundrobin
    server server1 192.168.10.111:8080 weight 1 check
    server server2 192.168.10.112:8080 weight 1 chec
    server server3 192.168.10.113:8080 weight 1 check
    option httplog
    option forwardfor
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
  • option forwardfor : Được sử dụng để thêm header “X-Forwarded-For”, vì vậy backend có thể nhận được địa chỉ IP thực của client truy cập. Nếu không có tùy chọn này thì backend sẽ chỉ nhận được thông tin IP của HAProxy.
  • http-request set-header X-Forwarded-Port %[dst_port] : thiết lập một header “X-Forwarded-Port” vì vậy mà backend biết được port nào để sử dụng khi redirect URLs.
  • http-request add-header X-Forwarded-Proto https if { ssl_fc } : Thêm header X-Forwarded-Proto với thiết lập scheme là https nếu yêu cầu truy cập https. Cái này, cho phép backend xác định được scheme để sử dụng khi gửi URL lúc redirect

Nội dung file cấu hình HAProxy đầy đủ cho site mymusic.vn sử dụng SSL

# Global settings
global
        log 127.0.0.1   local0
        pidfile     /var/run/haproxy.pid
        stats socket /var/lib/haproxy/stats
        maxconn 100000
        user haproxy
        group haproxy
        daemon
        quiet
# Proxies settings
## Defaults section
defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option      redispatch
        maxconn     100000
        retries                 3
        timeout http-request    5s
        timeout queue           30s
        timeout connect         30s
        timeout client          30s
        timeout server          30s
        timeout http-keep-alive 30s
        timeout check           30s
## Frontend section
frontend http-in
        bind *:80
        bind *:443 ssl no-sslv3 crt /etc/letsencrypt/live/mymusic.vn/mymusic.vn.pem
        redirect scheme https if { hdr(Host) -i mymusic.vn } !{ ssl_fc } 
        acl mymusic-acl hdr(host) -i mymusic.vn
        use_backend mymusic if mymusic-acl
backend mymusic
        balance roundrobin
        server server1 192.168.10.111:8080 weight 1 check
        server server2 192.168.10.112:8080 weight 1 chec
        server server3 192.168.10.113:8080 weight 1 check
        option httplog
        option forwardfor
        http-request set-header X-Forwarded-Port %[dst_port]
        http-request add-header X-Forwarded-Proto https if { ssl_fc }
## Cấu hình vào xem trang thống kê Statistics settings
listen statistics
        bind *:1986
        stats enable
        stats admin if TRUE
        stats hide-version
        stats realm Haproxy\ Statistics
        stats uri /stats
        stats refresh 30s
        # username/password
        stats auth keepwalking86:ILoveVietnam$

Gia hạn chứng chỉ SSL trên HAProxy

Phần gia hạn này cần cấu hình lại cái option trên tham khảo tại

Cách bảo mật HAProxy với Let’s Encrypt trên CentOS 7

Hướng dẫn bảo mật HAProxy với Let’s Encrypt trên CentOS 7

HAProxy Load Balancing cho web server sử dụng SSL