Let’s Encrypt là một tổ chức cung cấp chứng chỉ số SSL/TLS miễn phí để mã hóa thông tin trao đổi trên các trang web. Nó giúp đảm bảo rằng dữ liệu giữa người dùng và máy chủ được bảo vệ khỏi những kẻ tấn công.

Let’s Encrypt tự động hóa quy trình cấp và gia hạn chứng chỉ, giúp dễ dàng triển khai bảo mật trên các trang web

Trong bài viết này mình hướng dẫn anh em cài đặt certificates Let’s Encrypt trên Ubuntu 22.04 LTS.

1. Yêu cầu chuẩn bị

Để thực hiện anh em chuẩn bị cho mình một con máy ảo hoặc VPS hệ điều hành Ubuntu 22.04 LTS.

- Cấu hình tối thiểu:

  • Ram: 1-2G
  • HDD: 10-20G

- Cài đặt docker và docker-compose. Bạn nào mới bắt đầu thì xem bài viết này

2. Cài đặt Let’s Encrypt

Cài snap, certbot

apt install snap -y

snap install certbot --classic

Cài đặt một web server Apache/Nginx. Ở đây mình cài Apache

apt -y install apache2

web-no- certificates

Tạo certificates cho domain

certbot certonly --webroot -w /var/www/html -d web.vuihoctech.com 

Certificate Let’s Encrypt domain

Nhập email và chọn Y cho các câu hỏi.

Cấu hình SSL cho server web

Mặc định khi cài apache web server thì chạy cổng 80. Để kích hoạt cổng 443 chúng ta cần cấu hình như sau:

vi /etc/apache2/sites-available/default-ssl.conf

Chỉnh lại dòng 32,33 và 42

# line 32,33 : change to the certs gotten in section [1]
SSLCertificateFile       /etc/letsencrypt/live/web.vuihoctech.com/cert.pem
SSLCertificateKeyFile    /etc/letsencrypt/live/web.vuihoctech.com/privkey.pem

# line 42 : uncomment and change to the chain-file gotten in section [1]
SSLCertificateChainFile  /etc/letsencrypt/live/web.vuihoctech.com/chain.pem

Lưu lại và thoát. Sau đó kích hoạt bằng lệnh sau

a2ensite default-ssl
a2enmod ssl
systemctl restart apache2

Để luôn chuyển tiếp mặc định sang cổng 443 thay vì 80 thì cần cấu hình như sau:

vi /etc/apache2/sites-available/virtual.host.conf

Chỉnh lại dòng RewriteCond %{HTTPS} on sang RewriteCond %{HTTPS} off

<VirtualHost *:80>
    DocumentRoot /var/www/virtual.host
    ServerName www.virtual.host
    ServerAdmin webmaster@virtual.host
    ErrorLog /var/log/apache2/virtual.host.error.log
    CustomLog /var/log/apache2/virtual.host.access.log combined
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

Cấu hình để tự động cấp mới certificates

Mặc định certificates dùng trong 90 ngày sẽ hết hạn, do đó nếu muốn tự động cấp lại certificates chúng ta cần cài tự động cấp mới khi hết hạn

Tạo một systemd timer script trong Certbot. Đầu tiên kiểm tra systemd timer trước

Certificate Let’s Encrypt renew

Chưa có timer nào 0 timers listed

Tạo systemd timer cứ 2h kiểm tra mỗi ngày như sau

vi /lib/systemd/system/certbot.timer
[Unit]
Description=Run certbot twice daily

[Timer]
OnCalendar=*-*-* 00,12:00:00
RandomizedDelaySec=43200
Persistent=true

[Install]
WantedBy=timers.target

Tạo một certbot.service

vi /lib/systemd/system/certbot.service
[Unit]
Description=Certbot
Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html
Documentation=https://certbot.eff.org/docs
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true

Sau đó kích hoạt timer và service certbot

systemctl start certbot.timer
systemctl status certbot.timer
systemctl start certbot.service
systemctl status certbot.service

Kiểm tra lại timer

systemctl list-timers certbot.timer --no-pager

Lúc này đã có một system timer certbot được kích hoạt

3. Lời kết

Trên đây hướng dẫn cài đặt một Certificate Let’s Encrypt trên Ubuntu 22.04 LTS. Chúc anh em thành công!

4. Nguồn tham khảo

Một số nguồn tham khảo khác anh em có thể đọc thêm