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:
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:
Sau đó, bạn có thể cài đặt gói 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:
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:
OutputRule 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ỉ.
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:
OutputIMPORTANT 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:
Outputcert.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ặcssl-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:
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:
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:
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.