Skip to content

Sử dụng acme.sh để cấp phát chứng chỉ SSL tự động từ ZeroSSL hay Let’s Encrypt

acme.sh là gì?

acme.sh là một công cụ dòng lệnh mã nguồn mở được sử dụng để quản lý và tự động hóa quá trình xác minh và cài đặt chứng chỉ SSL/TLS từ Let’s Encrypt hoặc các nhà cung cấp chứng chỉ khác. Được viết bằng Shell script, acme.sh có thể hoạt động trên hầu hết các hệ điều hành Linux và cung cấp tích hợp với nhiều ứng dụng web server phổ biến như Apache, Nginx, LiteSpeed và cả các dịch vụ đám mây như AWS, Azure, Google Cloud, và nhiều hơn nữa.

Acme.sh cho phép bạn đăng ký, cấu hình và cài đặt chứng chỉ SSL/TLS tự động thông qua giao thức ACME (Automatic Certificate Management Environment). Nó cũng hỗ trợ tái cấu hình tự động và gia hạn chứng chỉ trong quá trình vận hành, giúp duy trì tính bảo mật của trang web hoặc ứng dụng của bạn một cách liên tục.

Điểm mạnh của acme.sh là đơn giản, linh hoạt và dễ sử dụng. Bằng cách sử dụng các tùy chọn và lệnh dòng lệnh, bạn có thể tạo, quản lý và triển khai chứng chỉ SSL/TLS một cách hiệu quả và tự động trong quá trình vận hành hệ thống của mình.

Trước đây mặc định ACME sẽ dùng hệ thống cấp phát chứng chỉ của Let’s Encrypt, nhưng tại thời điểm mình viết bài này thì ACME đã chuyển sang dùng ZeroSSL thay cho Let’s Encrypt, và vì sao họ lại thay đổi hệ thống cấp phát như vậy thì các bạn thể xem lợi ích khác nhau mà ZeroSSL và Let’s Encrypt mang lại cho người dùng bên dưới.

So với Let’s Encrypt, thì ZeroSSL gần như là vượt trội về mọi mặt. Nhưng có một số người dùng phản ánh rằng chứng chỉ ZeroSSL thường không ổn định, dễ bị lỗi hoặc cấp phát lâu hơn Let’s Encrypt.

Cài đặt

# -- Phải dùng email đăng ký
# -- 1. Cài đặt Online:
curl https://get.acme.sh | sh -s email=my@example.com
# -- OR
wget -O – https://get.acme.sh | sh -s email=my@example.com

# -- 2. Cài đặt với thu viện git
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh –install -m my@example.com

Chú ý: Bạn không cần phải chạy với quyền user root, mặc dù được khuyến khích chạy với quyền này để đảm bảo các lỗi ít xảy ra.

Cài đặt nâng cao: https://github.com/acmesh-official/acme.sh/wiki/How-to-install

Trình cài đặt sẽ thực hiện 3 hành động:

  • Tạo và sao chép acme.sh vào thư mục nhà của bạn ($HOME): ~/.acme.sh/. Tất cả các chứng chỉ cũng sẽ được đặt trong thư mục này.
  • Tạo bí danh cho: acme.sh=~/.acme.sh/acme.sh.
  • Tạo công việc định kỳ hàng ngày để kiểm tra và gia hạn chứng chỉ nếu cần.

Ví dụ nhập Cron:

0 0 * * * “/home/user/.acme.sh”/acme.sh –cron –home “/home/user/.acme.sh” > /dev/null

# -- Logout => login account, kiểm tra phiên bản
acme.sh -h

Thay đổi loại chứng chỉ cấp phát

Chúng ta có nói tới việc hiện nay ACME đã sử dụng ZeroSSL là hệ thống cấp phát chứng chỉ mặc định, do đó nếu bạn không muốn sử dụng ZeroSSL , và muốn thiết lập Let’s Encrypt là hệ thống cấp phát mặc định thì bạn có thể thực hiện như sau.

# -- Tìm file acme.sh
find / -name 'acme.sh'
# -- Nếu bạn cài đặt với account root thì nó sẽ ở
# -- /root/.acme.sh/acme.sh
# -- Backup và chỉnh sửa nội dung file acme.sh
cp /root/.acme.sh/acme.sh /root/.acme.sh/acme.sh.bak
vi /root/.acme.sh/acme.sh

Tìm đến giá trị bên dưới, và thay thế thành loại chứng chỉ mà bạn muốn cấp phát

DEFAULT_CA=$

Nếu cần sử dụng Let’s Encrypt thì bạn điền: CA_LETSENCRYPT_V2

Nếu cần sử dụng ZeroSSL thì bạn điện: CA_ZEROSSL

Nếu bạn không muốn sửa thủ công như trên, bạn có thể set nhanh bằng lệnh bên dưới

acme.sh --set-default-ca --server letsencrypt

Kiểm tra hoạt động

# -- Chạy dòng lệnh yêu cầu cấp phát chứng chỉ
acme.sh --issue -d sitewp.tk -d www.sitewp.tk -w /www/wwwroot/sitewp.tk --force

Trong đó:

  • -d : Để cài SSL cho một tên miền, bạn chỉ cần thêm -d trước tên miền cần cài đặt.
  • -w : Bạn thêm -w trước đường dẫn chứa chứa mã nguồn của website cần cài đặt.

Khi cài đặt đã bắt đầu và ACME đang kết nối đến máy chủ Let’s Encrypt thay vì ZeroSSL như mặc định.

Và cài đặt thành công bạn sẽ nhận được các File chứng chỉ tại đường dẫn cụ thể bên dưới, bạn chỉ cần sử dụng nội dung của 2 File .keyfullchain.cer để cài đặt SSL cho website.

Các chứng chỉ sẽ được đặt trong ~/.acme.sh/sitewp.tk/ . Chứng chỉ sẽ được tự động gia hạn sau mỗi 60 ngày.

Sau khi đã import chứng chỉ xong, bạn có thể truy cập vào website để kiểm tra hoặc có thể check trực tiếp thông qua Check SSL Online

Cài đặt certificate vào webserivce apache hoặc nginx

Sau khi chứng chỉ được tạo, bạn có thể muốn cài đặt/sao chép chứng chỉ vào webservice Apache/Nginx hoặc các máy chủ khác. Bạn PHẢI sử dụng lệnh này để sao chép chứng chỉ vào tệp đích, KHÔNG sử dụng tệp chứng chỉ trong thư mục ~/.acme.sh/, chúng chỉ dành cho sử dụng nội bộ, cấu trúc thư mục có thể thay đổi trong tương lai.

# -- Ví dụ về Apache:
acme.sh –install-cert -d example.com \
        –cert-file /path/to/certfile/in/Apache/cert.pem \
        –key-file /path/to/keyfile/in/Apache/key.pem \
        –fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
        –reloadcmd “dịch vụ apache2 buộc tải lại”
# service apache2 force-reload      

# -- Ví dụ Nginx:
acme.sh –install-cert -d example.com \
        –key-file /path/to/keyfile/in/nginx/key.pem \
        –fullchain-file /path/to/fullchain/nginx/cert.pem \
        –reloadcmd “dịch vụ nginx bắt buộc tải lại”
# -- service nginx force-reload

Chỉ tên miền là bắt buộc, tất cả các tham số khác là tùy chọn. Thông tin về quyền sở hữu và quyền của các tệp hiện có được giữ nguyên. Bạn có thể tạo trước các tệp để xác định quyền sở hữu và quyền.Sau đó Cài đặt/sao chép chứng chỉ/khóa vào đường dẫn Apache hoặc Nginx sản xuất.

Theo mặc định, chứng chỉ sẽ được gia hạn 60 ngày một lần (có thể định cấu hình). **Sau khi chứng chỉ được gia hạn, dịch vụ Apache/Nginx sẽ được tải lại tự động bằng lệnh được khai báo trong -reloadcmd **

Chú ý: -loadcmd rất quan trọng. Chứng chỉ có thể được gia hạn tự động, nhưng nếu không có ‘-reloadcmd’ chính xác, chứng chỉ có thể không được chuyển đến máy chủ của bạn (như nginx hoặc apache), khi đó trang web của bạn sẽ không thể hiển thị chứng chỉ được gia hạn sau 60 ngày.

HAProxy and Let’s Encrypt: Improved Support in acme.sh

Sử dụng SSL Let’s Encrypt với HAProxy

https://www.haproxy.com/blog/haproxy-and-let-s-encrypt

Cài đặt Let's Encrypt SSL trên CentOS 8 với Nginx và sử dụng ACME

Let's Encrypt SSL với Nginx và sử dụng ACME