Let's Encrypt là một cơ quan cấp chứng chỉ (CA) tự động và mở do Internet Security Research Group (ISRG) điều hành và được thành lập bởi Electronic Frontier Foundation (EFF), Mozilla Foundation và các tổ chức khác. Cơ quan này cung cấp các chứng chỉ SSL/TLS miễn phí thường được sử dụng để mã hóa thông tin liên lạc cho mục đích bảo mật và quyền riêng tư, trường hợp sử dụng đáng chú ý nhất là HTTPS. Let's Encrypt dựa vào giao thức ACME (Môi trường quản lý chứng chỉ tự động) để cấp, thu hồi và gia hạn chứng chỉ. Certbot là một tiện ích miễn phí và mã nguồn mở chủ yếu được sử dụng để quản lý các chứng chỉ SSL/TLS từ cơ quan cấp chứng chỉ Let's Encrypt. Có sẵn cho hầu hết các hệ điều hành UNIX và giống UNIX, bao gồm GNU/Linux, FreeBSD, OpenBSD và OS X. Hướng dẫn này sẽ cung cấp phần giới thiệu không phụ thuộc vào nền tảng về cách sử dụng certbot.
LƯU Ý: Vì certbot đang trong quá trình phát triển nên một số tính năng hoặc hành vi được mô tả trong hướng dẫn này có thể khác trong các bản phát hành cũ hơn hoặc trong tương lai.
Certbot cũng bao gồm các tính năng gia hạn và thu hồi chứng chỉ.
Debian và Ubuntu:
CentOS 7:
Fedora và CentOS 8:
Arch Linux:
FreeBSD:
OpenBSD 6.0 trở lên:
MacOS (homebrew bắt buộc):
Khác:
Nếu gói certbot không khả dụng cho nền tảng của bạn, bạn có thể sử dụng tập lệnh wrapper certbot-auto chính thức để cài đặt certbot tự động trên hệ thống của bạn. Bạn có thể tải xuống tại đây.
Sử dụng máy chủ web hiện có
Để sử dụng máy chủ web hiện có của bạn, hãy đảm bảo rằng nó đang chạy và lắng nghe trên cổng 80 trước khi thực hiện lệnh sau
Bạn sẽ được nhắc nhập, trong số các thông tin khác, tên miền của bạn và đường dẫn đến webroot của bạn, theo mặc định là `/var/www/html/` trên hầu hết các hệ thống Linux. Ngoài ra, bạn có thể chỉ định thông tin bắt buộc làm đối số lệnh. Ví dụ:
Sử dụng máy chủ web độc lập
Để sử dụng máy chủ độc lập, trước tiên hãy đảm bảo tính khả dụng của cổng 80. Bạn có thể kiểm tra bất kỳ quy trình nào liên kết với cổng đó bằng cách sử dụng:
Nếu cần, hãy dừng dịch vụ/quy trình vi phạm trước khi tiếp tục. Sau đó, hãy phát lệnh:
Sau khi chứng chỉ được cấp, bạn sẽ cần phải cấu hình máy chủ web của mình theo cách thủ công. Các tệp liên quan có thể được tìm thấy trong /etc/letsencrypt/live/your_domain.
Giả sử máy chủ web của bạn đã được cấu hình cho tên miền của bạn, certbot sẽ phân tích cú pháp cấu hình hiện có và nhắc bạn chọn tên miền nào mà HTTPS sẽ được kích hoạt. Nếu máy chủ web của bạn chưa được cấu hình hoặc nếu certbot không phát hiện được tên miền của bạn, chỉ cần nhập thủ công tên miền của bạn khi được nhắc. Ví dụ:
Certbot sẽ tạo một tệp cấu hình Apache mới cho máy chủ ảo HTTPS mới của bạn và sẽ hỏi xem lưu lượng HTTP có nên được chuyển hướng đến HTTPS hay không. Trừ khi bạn có lý do chính đáng để không làm như vậy, bạn nên bật chuyển hướng sang HTTPS.
Để gia hạn chứng chỉ của bạn với certbot, bạn có thể sử dụng lệnh phụ renew. Trong quá trình gia hạn, certbot sẽ sử dụng cùng các plugin và tùy chọn được sử dụng cho lần cấp ban đầu. Chứng chỉ chỉ được gia hạn nếu hết hạn trong vòng chưa đầy 30 ngày, do đó, bạn có thể sử dụng lệnh phụ này thường xuyên tùy ý vì nó sẽ không thực hiện hành động nào nếu chứng chỉ chưa đến ngày hết hạn. Lệnh đơn giản là:
Nếu plugin độc lập được sử dụng để cấp chứng chỉ, bạn sẽ cần dừng máy chủ web của mình để gia hạn thành công. Bạn có thể thực hiện điều đó bằng cách sử dụng hook. Ví dụ: nếu hệ thống chạy Apache, lệnh sẽ là:
Gia hạn tự động
Nhiều bản phân phối đã bật gia hạn tự động theo mặc định, thông qua bộ đếm thời gian systemd hoặc công việc cron. Bạn có thể kiểm tra bộ đếm thời gian systemd bằng:
Và đối với công việc cron bằng cách sử dụng:
Nếu plugin webroot được sử dụng để cấp, gia hạn tự động sẽ thành công miễn là máy chủ web của bạn đang chạy. Tuy nhiên, với plugin độc lập, lệnh gia hạn tự động mặc định sẽ không thành công trong trường hợp máy chủ web đang chạy, vì certbot sẽ không thể liên kết với cổng 80. Do đó, cần phải sửa đổi lệnh này bằng cách thêm các hook như được hiển thị ở trên.
Ví dụ:
Sau khi chạy lệnh phụ revoke, certbot sẽ hỏi xem có nên xóa các tệp chứng chỉ hay không. Nếu bạn chọn không xóa chúng, chứng chỉ đã thu hồi sẽ được gia hạn trong lần gia hạn tiếp theo. Một số tùy chọn tự giải thích có thể được chuyển đến lệnh con recall:
Sử dụng lệnh sau để yêu cầu chứng chỉ đại diện:
Certbot sẽ hiển thị giá trị cần triển khai trong bản ghi TXT DNS. Bản ghi TXT này đóng vai trò là xác thực quyền sở hữu cần thiết.
Bạn sẽ cần tạo bản ghi đã chỉ định trong bảng điều khiển DNS của mình trước khi tiếp tục. Sau khi bản ghi được tạo, hãy đợi vài phút trước khi nhấn Enter, điều này sẽ kích hoạt máy chủ ACME để xác minh bản ghi đó. Trong một số trường hợp, có thể cần thời gian chờ lâu hơn để bản ghi mới được truyền bá đúng cách và có thể truy cập được. Sau khi thành công, chứng chỉ, chuỗi và khóa riêng sẽ được lưu tại /etc/letsencrypt/live/example.com/.
LƯU Ý: Vì certbot đang trong quá trình phát triển nên một số tính năng hoặc hành vi được mô tả trong hướng dẫn này có thể khác trong các bản phát hành cũ hơn hoặc trong tương lai.
Yêu cầu
- Tên miền đã đăng ký có bản ghi A trỏ đến địa chỉ IPv4 của bạn. `www.example.com` sẽ được sử dụng làm ví dụ.
- Truy cập vào shell đặc quyền.
Khái niệm chung
Chế độ hoạt động
Sử dụng certbot để bật HTTPS có thể được chia thành hai phần: Xác thực và Cài đặt. Phần đầu tiên yêu cầu giải quyết một thử thách và lưu chứng chỉ cùng các tệp khác. Bước cài đặt liên quan đến việc định cấu hình và bảo mật máy chủ web. Certbot có thể tự động thực hiện cả hai, với lệnh phụ run. Các lệnh phụ certonly và install tương ứng cho các bước xác thực và cài đặt.Certbot cũng bao gồm các tính năng gia hạn và thu hồi chứng chỉ.
Thử thách
Để có được chứng chỉ Let's Encrypt, bạn phải giải quyết thử thách xác thực tên miền do máy chủ ACME (Môi trường quản lý chứng chỉ tự động) đưa ra. Thử thách này xác minh quyền sở hữu của bạn đối với tên miền mà bạn đang cố gắng lấy chứng chỉ. Có nhiều loại thử thách khác nhau, loại thường được sử dụng nhất là HTTP-01. Như tên gọi của nó, nó sử dụng giao thức HTTP. Mặc dù máy chủ HTTP có thể được cấu hình để sử dụng bất kỳ cổng TCP nào, nhưng thử thách này sẽ chỉ hoạt động trên cổng 80 do các biện pháp bảo mật. DNS-01 là một loại thử thách khác ít phổ biến hơn dựa trên độ phân giải DNS. Lưu ý rằng không thể lấy được chứng chỉ đại diện thông qua thử thách HTTP-01. Hướng dẫn này ban đầu sẽ tập trung vào HTTP-01.Plugin
Certbot dựa vào các plugin để thực hiện xác thực và cài đặt. Các plugin như webroot và standalone chỉ thực hiện xác thực, trong khi các plugin khác như plugin Apache và Nginx được thiết kế để tự động lấy và cài đặt chứng chỉ (tức là cấu hình máy chủ web). Các plugin khác bao gồm một số plugin DNS dành riêng cho nhà cung cấp để xác thực DNS-01. Hầu hết các plugin certbot được cài đặt riêng, ngoại trừ các plugin webroot và standalone được tích hợp sẵn.Cài đặt Certbot
Hầu hết các bản phân phối Linux đều cung cấp certbot trong kho lưu trữ chính thức của chúng. Dưới đây là hướng dẫn cài đặt cho các nền tảng được sử dụng rộng rãi.Debian và Ubuntu:
Mã:
apt update
Mã:
apt install -y certbot
Mã:
yum install -y certbot
Mã:
dnf install -y certbot
Mã:
pacman -Sy certbot
Mã:
pkg install py36-certbot
Mã:
pkg_add certbot
Mã:
brew install letsencrypt
Nếu gói certbot không khả dụng cho nền tảng của bạn, bạn có thể sử dụng tập lệnh wrapper certbot-auto chính thức để cài đặt certbot tự động trên hệ thống của bạn. Bạn có thể tải xuống tại đây.
Sử dụng Certbot
Niêm yết chứng chỉ
Để hiển thị danh sách các chứng chỉ do certbot quản lý trên máy chủ của bạn, hãy đưa ra lệnh:
Mã:
certbot certificates
Lấy chứng chỉ để cấu hình thủ công
Nếu bạn chọn cấu hình thủ công máy chủ web của mình, bạn có thể lấy chứng chỉ theo hai cách. Hoặc là cấp cho certbot quyền truy cập vào thư mục gốc web của máy chủ (tức là plugin webroot) hoặc là triển khai máy chủ web độc lập tạm thời trên cổng 80 (tức là plugin độc lập). Plugin sau hữu ích trong trường hợp không thể tích hợp với máy chủ web hiện tại của bạn hoặc không mong muốn. Để thuận tiện và gia hạn đơn giản hơn, hãy nhất quán với plugin được sử dụng.Sử dụng máy chủ web hiện có
Để sử dụng máy chủ web hiện có của bạn, hãy đảm bảo rằng nó đang chạy và lắng nghe trên cổng 80 trước khi thực hiện lệnh sau
Mã:
certbot certonly --webroot
Mã:
certbot certonly --webroot --webroot-path /var/www/html --agree-tos -m [emailprotected] -d www.example.com
Để sử dụng máy chủ độc lập, trước tiên hãy đảm bảo tính khả dụng của cổng 80. Bạn có thể kiểm tra bất kỳ quy trình nào liên kết với cổng đó bằng cách sử dụng:
Mã:
ss -lntp 'sport = 80'
Mã:
certbot certonly --standalone
Cài đặt HTTPS tương tác
Như đã đề cập trước đó, certbot có thể tự động hóa toàn bộ quy trình thiết lập HTTPS, bao gồm cả cấu hình máy chủ web. Các plugin có sẵn cho cả Apache và Nginx và có thể cần phải được cài đặt dưới dạng một gói riêng. Cài đặt plugin certbot dành riêng cho máy chủ web của bạn, sau đó thực thi `certbot run --PLUGIN_NAME`. Chúng tôi sẽ trình bày toàn bộ quy trình cho Apache trên hệ thống Debian 10. Quy trình cho Nginx cũng tương tự.
Mã:
apt install -y python-certbot-apachecertbot run --apache
Mã:
Bạn muốn kích hoạt HTTPS cho những tên nào?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Chọn các số thích hợp được phân tách bằng dấu phẩy và/hoặc dấu cách hoặc để trống đầu vào
để chọn tất cả các tùy chọn được hiển thị (Nhập 'c' để hủy): 1
Mã:
Vui lòng chọn có chuyển hướng lưu lượng HTTP sang HTTPS hay không, xóa quyền truy cập HTTP.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -1: Không chuyển hướng - Không thực hiện thêm bất kỳ thay đổi nào đối với cấu hình máy chủ web.2: Chuyển hướng - Chuyển hướng tất cả các yêu cầu đến quyền truy cập HTTPS an toàn. Chọn tùy chọn này chocác trang web mới hoặc nếu bạn tin chắc rằng trang web của mình hoạt động trên HTTPS. Bạn có thể hoàn tácthay đổi này bằng cách chỉnh sửa cấu hình máy chủ web của mình.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Chọn số thích hợp [1-2] rồi [enter] (nhấn 'c' để hủy): 2Đã bật mô-đun ghi đè ApacheĐang chuyển hướng vhost trong /etc/apache2/sites-enabled/www.example.com.conf sang ssl vhost trong /etc/apache2/sites-available/www.example.com-le-ssl.conf- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Xin chúc mừng! Bạn đã bật thành công https://www.example.com
Gia hạn chứng chỉ
Gia hạn thủ côngĐể gia hạn chứng chỉ của bạn với certbot, bạn có thể sử dụng lệnh phụ renew. Trong quá trình gia hạn, certbot sẽ sử dụng cùng các plugin và tùy chọn được sử dụng cho lần cấp ban đầu. Chứng chỉ chỉ được gia hạn nếu hết hạn trong vòng chưa đầy 30 ngày, do đó, bạn có thể sử dụng lệnh phụ này thường xuyên tùy ý vì nó sẽ không thực hiện hành động nào nếu chứng chỉ chưa đến ngày hết hạn. Lệnh đơn giản là:
Mã:
certbot renew
Mã:
certbot renew --pre-hook "systemctl stop apache2.service" --post-hook "systemctl start apache2.service"
Nhiều bản phân phối đã bật gia hạn tự động theo mặc định, thông qua bộ đếm thời gian systemd hoặc công việc cron. Bạn có thể kiểm tra bộ đếm thời gian systemd bằng:
Mã:
systemctl list-timers
Mã:
ls /etc/cron*
Thu hồi chứng chỉ
Có thể thu hồi chứng chỉ bằng cách chỉ định đường dẫn hoặc tên chứng chỉ:
Mã:
certbot recall --cert-name cert_name(HOẶC)certbot recall --cert-path /path/to/cert.pem
Mã:
certbot recall --cert-name www.example.net
- --delete-after-revoke (lời nhắc để người dùng lựa chọn theo mặc định)
- --no-delete-after-revoke (lời nhắc để người dùng lựa chọn theo mặc định)
- --reason [unspecified,keycompromise,affiliationchanged,superseded,cessationofoperation] (Mặc định: unspecified)
Chứng chỉ đại diện
Có thể sử dụng một chứng chỉ đại diện duy nhất để xác định nhiều miền phụ, thay thế cho các chứng chỉ thông thường riêng biệt. Để có được chứng chỉ đại diện, phải sử dụng thử thách DNS-01. Mặc dù có một số plugin dành riêng cho nhà cung cấp tự động hóa quy trình xác thực ACME, chúng tôi sẽ giải thích quy trình thủ công, trung lập với nhà cung cấp. Cần phải truy cập vào máy chủ tên cho tên miền của bạn.Sử dụng lệnh sau để yêu cầu chứng chỉ đại diện:
Mã:
certbot certonly --manual --preferred-challenges dns-01 -d *.example.net
Mã:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Vui lòng triển khai bản ghi TXT DNS dưới tên_acme-challenge.example.net với giá trị sau:y77OkxXi89sJLjUgYu-HReYrcVlxt_bfG8yVOVKngBOcUTrước khi tiếp tục, hãy xác minh bản ghi đã được triển khai.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Nhấn Enter để Tiếp tục
Tài liệu tham khảo và thông tin bổ sung
- Kho lưu trữ Github chính thức của Certbot
- Môi trường quản lý chứng chỉ tự động (ACME) RFC 8555
- Tài liệu EFF Certbot
- Trang hướng dẫn Certbot(1)