---
title: "Cách sử dụng Standalone Mode của Certbot để truy xuất chứng chỉ SSL Let's Encrypt trên Ubuntu 20.04"
description: "Cách sử dụng Chế độ độc lập của Certbot để truy xuất chứng chỉ SSL Let's Encrypt trên Ubuntu 20.04"
url: https://cloudfly.vn/techblog/cach-su-dung-standalone-mode-cua-certbot-de-truy-xuat-chung-chi-ssl-lets-encrypt-tren-ubuntu-2004
image: https://media.cloudfly.vn/posts/techblog_093I9Rt.png
---

# Cách sử dụng Standalone Mode của Certbot để truy xuất chứng chỉ SSL Let's Encrypt trên Ubuntu 20.04

## Giới thiệu
Let’s Encrypt là dịch vụ cung cấp chứng chỉ SSL miễn phí thông qua một API tự động. Ứng dụng Let’s Encrypt phổ biến nhất là EFF’s Certbot.

Certbot cung cấp nhiều cách khác nhau để xác thực miền của bạn, lấy chứng chỉ và tự động thiết lập cấu hình Apache và Nginx. Trong hướng dẫn này, chúng ta sẽ thảo luận về Standalone Mode của Certbot và cách sử dụng nó để bảo mật các loại dịch vụ khác, chẳng hạn như mail server hoặc message broker như RabbitMQ.

Chúng tôi sẽ không thảo luận về chi tiết của cấu hình SSL, nhưng khi bạn hoàn tất, bạn sẽ có một chứng chỉ hợp lệ được tự động gia hạn. Ngoài ra, bạn sẽ có thể tự động tải lại dịch vụ của mình để nhận chứng chỉ đã được gia hạn.

## Điều kiện 
Trước khi bắt đầu với hướng dẫn này, bạn sẽ cần:

* Máy chủ Ubuntu 20.04 với non-root user có đặc quyền `sudo` và thiết lập tường lửa cơ bản, như được trình bày chi tiết trong Hướng dẫn thiết lập máy chủ Ubuntu 20.04.
* Một tên miền đã trỏ đến máy chủ của bạn. Nếu bạn đang sử dụng CloudFly Droplet, bạn có thể thực hiện điều này bằng cách làm theo tài liệu Tên miền và DNS của chúng tôi. Hướng dẫn này sẽ sử dụng `<^>your_domain<^>` xuyên suốt.
* Cổng 80 **hoặc** 443 không được sử dụng trên máy chủ của bạn. Nếu dịch vụ bạn đang cố gắng bảo mật nằm trên máy có máy chủ web chiếm cả hai cổng đó, bạn sẽ cần sử dụng một chế độ khác, chẳng hạn như chế độ webroot của Certbot.

## Bước 1: Cài đặt Certbot
Certbot khuyên bạn nên sử dụng gói snap của họ để cài đặt. Các gói Snap hoạt động trên gần như tất cả các bản phân phối Linux, nhưng chúng yêu cầu bạn phải cài đặt snapd trước để quản lý các gói snap. Ubuntu 20.04 đi kèm với hỗ trợ snaps out, vì vậy bạn có thể bắt đầu bằng cách đảm bảo rằng snapd core của bạn được cập nhật:
```command
sudo snap install core; sudo snap refresh core
```
Nếu bạn đang làm việc trên một máy chủ trước đó đã cài đặt phiên bản certbot cũ hơn, bạn nên xóa nó trước khi tiếp tục:
```command
sudo apt remove certbot
```
Sau đó, bạn có thể cài đặt gói `certbot`:
```command
sudo snap install --classic certbot
```
Cuối cùng, bạn có thể liên kết lệnh `certbot` từ thư mục cài đặt snap với đường dẫn của mình, vì vậy bạn sẽ có thể chạy lệnh đó bằng cách nhập `certbot`. Điều này không cần thiết với tất cả các gói, nhưng theo mặc định, snaps có xu hướng ít bị xâm nhập hơn, vì vậy chúng không tình cờ xung đột với bất kỳ gói hệ thống nào khác:
```command
sudo ln -s /snap/bin/certbot /usr/bin/certbot
```
Bây giờ chúng ta đã cài đặt Certbot, hãy chạy nó để lấy chứng chỉ của chúng tôi.

## Bước 2: Chạy Certbot
Certbot cần phải trả lời một thách thức mật mã (cryptographic challenge) do API Let’s Encrypt đưa ra để chứng minh rằng chúng ta kiểm soát miền của mình. Nó sử dụng cổng `80` (HTTP) hoặc `443` (HTTPS) để thực hiện điều này. Mở (các) cổng thích hợp trong tường lửa của bạn:
```command
sudo ufw allow <^>443<^>
```
```
[secondary_label Output]
Rule added
Rule added (v6)
```
Bây giờ chúng ta có thể chạy Certbot để lấy chứng chỉ của mình. Chúng tôi sẽ sử dụng tùy chọn `--standalone` để yêu cầu Certbot xử lý thách thức bằng máy chủ web tích hợp của riêng nó. Cuối cùng, cờ `-d` được sử dụng để chỉ định miền bạn đang yêu cầu chứng chỉ. Bạn có thể thêm nhiều tùy chọn `-d` để bao gồm nhiều miền trong một chứng chỉ.
```command
sudo certbot certonly --standalone -d <^>your_domain<^>
```
Khi chạy lệnh, bạn sẽ được nhắc nhở nhập địa chỉ email và đồng ý với các điều khoản dịch vụ. Sau khi làm như vậy, bạn sẽ thấy một thông báo cho biết quá trình đã thành công và nơi lưu trữ các chứng chỉ của bạn:
```
[secondary_label Output]
IMPORTANT NOTES:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-02-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
```
Bây giờ bạn sẽ có chứng chỉ của mình. Trong bước tiếp theo, chúng ta sẽ kiểm tra một số tệp mà chúng ta đã tải xuống và tìm hiểu về chức năng của chúng.

## Bước 3: Thiết lập cấu hình ứng dụng của bạn
Thiết lập cấu hình ứng dụng của bạn cho SSL nằm ngoài phạm vi của bài viết này, vì mỗi ứng dụng có các yêu cầu và tùy chọn cấu hình khác nhau, nhưng chúng ta hãy xem những gì Certbot đã tải xuống. Sử dụng `ls` để liệt kê ra thư mục chứa các khóa và chứng chỉ của chúng ta:
```command
sudo ls /etc/letsencrypt/live/<^>your_domain<^>
```
```
[secondary_label Output]
cert.pem  chain.pem  fullchain.pem  privkey.pem  README
```
Tệp `README` trong thư mục này có thêm thông tin về từng tệp này. Thông thường, bạn sẽ chỉ cần hai trong số các tệp sau:

* `privkey.pem`: Đây là khóa riêng tư cho chứng chỉ. Điều này cần được giữ an toàn và bí mật, đó là lý do tại sao hầu hết thư mục `/etc/letsencrypt` có quyền rất hạn chế và chỉ **root** user mới có thể truy cập được. Hầu hết cấu hình phần mềm sẽ coi đây là thứ tương tự như `ssl-certificate-key` hoặc `ssl-certificate-key-file`.
* `fullchain.pem`: Đây là chứng chỉ của chúng ta, đi kèm với tất cả các chứng chỉ trung gian. Hầu hết phần mềm sẽ sử dụng tệp này cho chứng chỉ thực và sẽ tham chiếu đến nó trong cấu hình của chúng với tên như ‘ssl-certificate’.
Để biết thêm thông tin về các tệp khác hiện có, hãy tham khảo phần “[Chứng chỉ của tôi ở đâu: https: //eff-certbot.readthedocs.io/en/stable/using.html#where-are-my-certificates)” của tài liệu Certbot.

Một số phần mềm sẽ cần chứng chỉ của nó ở các định dạng khác, ở các vị trí khác hoặc với các quyền của người dùng khác. Tốt nhất là để mọi thứ trong thư mục `letsencrypt` và không thay đổi bất kỳ quyền nào trong đó (dù sao thì quyền cũng sẽ bị ghi đè khi gia hạn), nhưng đôi khi đó không phải là một tùy chọn. Trong trường hợp đó, bạn sẽ cần viết tập lệnh để di chuyển tệp và thay đổi quyền nếu cần. Tập lệnh này sẽ cần được chạy bất cứ khi nào Certbot gia hạn chứng chỉ, điều này chúng ta sẽ nói đến ở phần tiếp theo.
## Bước 4: Xử lý việc gia hạn tự động Certbot
Chứng chỉ của Let’s Encrypt chỉ có giá trị trong chín mươi ngày. Điều này nhằm khuyến khích người dùng tự động hóa quy trình gia hạn chứng chỉ của họ. Gói `certbot` mà chúng ta đã cài đặt sẽ giải quyết việc này cho chúng ta bằng cách thêm tập lệnh gia hạn vào `/etc/cron.d`. Tập lệnh này chạy hai lần một ngày và sẽ gia hạn bất kỳ chứng chỉ nào trong vòng ba mươi ngày kể từ ngày hết hạn.

Với việc chứng chỉ tự động gia hạn, chúng ta vẫn cần một cách để chạy các tác vụ khác sau khi gia hạn. Ít nhất chúng ta cần phải khởi động lại hoặc tải lại máy chủ của mình để nhận các chứng chỉ mới và như đã đề cập ở Bước 3, chúng ta có thể cần thao tác các tệp chứng chỉ theo một cách nào đó để làm cho chúng hoạt động với phần mềm đang sử dụng. Đây là mục đích của tùy chọn `renew_hook` của Certbot.

Để thêm `renew_hook`, chúng ta cập nhật tệp cấu hình gia hạn của Certbot. Certbot ghi nhớ tất cả các chi tiết về cách bạn tìm nạp chứng chỉ lần đầu tiên và sẽ chạy với các tùy chọn tương tự khi gia hạn. Chúng ta chỉ cần thêm vào hook. Mở tệp cấu hình bằng trình chỉnh sửa yêu thích của bạn:
```command
sudo nano /etc/letsencrypt/renewal/<^>your_domain<^>.conf
```
Một tệp văn bản sẽ mở ra với một số tùy chọn cấu hình. Bạn có thể thêm hook vào dòng cuối cùng sẽ tải lại bất kỳ dịch vụ nào trên web, khiến chúng sử dụng chứng chỉ đã được gia hạn:

```nginx
[label /etc/letsencrypt/renewal/<^>your_domain<^>.conf]
renew_hook = <^>systemctl reload your_service<^>
```

Cập nhật lệnh ở trên thành bất kỳ thứ gì bạn cần chạy để tải lại máy chủ của mình, hoặc chạy tập lệnh trộn file tùy chỉnh của bạn. Thông thường, trên Ubuntu, bạn chủ yếu sẽ sử dụng `systemctl` để tải lại một dịch vụ. Lưu và đóng tệp, sau đó chạy Certbot dry run để đảm bảo cú pháp ổn:
```command
sudo certbot renew --dry-run
```
Nếu bạn không thấy lỗi, bạn đã hoàn tất. Certbot được đặt để gia hạn khi cần thiết và chạy bất kỳ lệnh nào để sử dụng dịch vụ của bạn bằng các tệp mới.

## Kết luận
Trong hướng dẫn này, chúng ta đã cài đặt ứng dụng Certbot Let’s Encrypt, tải xuống chứng chỉ SSL bằng chế độ độc lập và bật tính năng gia hạn tự động với renew hooks. Điều này sẽ giúp bạn có một khởi đầu tốt khi sử dụng chứng chỉ Let’s Encrypt với các dịch vụ khác với máy chủ web thông thường của bạn.

Để biết thêm thông tin, vui lòng tham khảo tài liệu của Certbot.
