Thứ năm, 28/05/2020 | 00:00 GMT+7

Cách lấy chứng chỉ Let's Encrypt sử dụng xác thực DNS với acme-dns-certbot trên Ubuntu 18.04

Phần lớn các certificate Let's Encrypt được cấp bằng xác thực HTTP, cho phép dễ dàng cài đặt certificate trên một server . Tuy nhiên, xác thực HTTP không phải lúc nào cũng phù hợp để cấp certificate để sử dụng trên các trang web cân bằng tải, cũng như không thể dùng để cấp chứng chỉ ký tự đại diện .

Xác thực DNS cho phép các yêu cầu cấp certificate được xác minh bằng cách sử dụng bản ghi DNS, thay vì cho truy cập qua HTTP. Điều này nghĩa là các certificate có thể được cấp đồng thời cho một cụm web server chạy sau bộ cân bằng tải hoặc cho một hệ thống không thể truy cập trực tiếp qua internet. Chứng chỉ ký tự đại diện cũng được hỗ trợ bằng cách sử dụng xác thực DNS.

Công cụ acme-dns-certbot được sử dụng để kết nối Certbot với server DNS của bên thứ ba, nơi các bản ghi xác thực certificate có thể được đặt tự động thông qua API khi bạn certificate request . Ưu điểm của việc này là bạn không cần tích hợp Certbot trực tiếp với account nhà cung cấp DNS của bạn , cũng như không cần cấp cho nó quyền truy cập không hạn chế vào cấu hình DNS đầy đủ của bạn, điều này có lợi cho bảo mật.

Các vùng DNS được ủy quyền được sử dụng để chuyển hướng tìm kiếm các bản ghi xác minh certificate đến dịch vụ DNS của bên thứ ba, vì vậy khi quá trình cài đặt ban đầu đã hoàn tất, bạn có thể yêu cầu nhiều certificate tùy thích mà không cần phải thực hiện bất kỳ xác thực thủ công nào.

Một lợi ích chính khác của acme-dns-certbot là nó được dùng để cấp certificate cho các server riêng lẻ có thể đang chạy phía sau bộ cân bằng tải hoặc không thể truy cập trực tiếp qua HTTP. Không thể sử dụng xác thực certificate HTTP truyền thống trong những trường hợp này, trừ khi bạn đặt file xác thực trên mỗi và mọi server . Công cụ acme-dns-certbot cũng hữu ích nếu bạn muốn cấp certificate cho một server không thể truy cập qua internet, chẳng hạn như hệ thống nội bộ hoặc môi trường dàn dựng.

Trong hướng dẫn này, bạn sẽ sử dụng móc acme-dns-certbot để Certbot cấp certificate Let's Encrypt bằng cách sử dụng xác thực DNS.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần :

  • Server Ubuntu 18.04 được cài đặt theo Cài đặt server ban đầu với Ubuntu 18.04 , bao gồm cả user không phải root có quyền sudo .

  • Tên domain mà bạn có thể lấy certificate TLS, bao gồm khả năng thêm bản ghi DNS. Trong ví dụ cụ thể này, ta sẽ sử dụng your-domainsubdomain.your-domain , cũng như *. your-domain cho một certificate ký tự đại diện. Tuy nhiên, điều này có thể được điều chỉnh cho domain , domain phụ hoặc ký tự đại diện khác nếu được yêu cầu.

Khi đã sẵn sàng những thứ này, hãy đăng nhập vào server của bạn với quyền là user không phải root của bạn để bắt đầu.

Bước 1 - Cài đặt Certbot

Trong bước này, bạn sẽ cài đặt Certbot, là một chương trình dùng để phát hành và quản lý certificate Let's Encrypt.

Certbot có sẵn trong repository lưu trữ Ubuntu Apt chính thức, tuy nhiên, thay vào đó, bạn nên sử dụng repository do các nhà phát triển Certbot duy trì, vì điều này luôn có version mới nhất của phần mềm.

Bắt đầu bằng cách thêm repository Certbot:

  • sudo apt-add-repository ppa:certbot/certbot

Bạn cần nhấn ENTER để chấp nhận dấu nhắc và thêm repository mới vào hệ thống của bạn .

Tiếp theo, cài đặt gói Certbot:

  • sudo apt install certbot

Sau khi cài đặt xong, bạn có thể kiểm tra xem Certbot đã được cài đặt thành công chưa:

  • certbot --version

Điều này sẽ xuất ra một cái gì đó tương tự như sau:

Output
certbot 0.31.0

Trong bước này, bạn đã cài đặt Certbot. Tiếp theo, bạn sẽ download và cài đặt hook acme-dns-certbot.

Bước 2 - Cài đặt acme-dns-certbot

Bây giờ chương trình Certbot cơ sở đã được cài đặt, bạn có thể download và cài đặt acme-dns-certbot, chương trình này sẽ cho phép Certbot hoạt động ở chế độ xác thực DNS.

Bắt đầu bằng cách download bản sao của tập lệnh:

  • wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py

Sau khi quá trình download hoàn tất, hãy đánh dấu tập lệnh là có thể thực thi:

  • chmod +x acme-dns-auth.py

Sau đó, chỉnh sửa file bằng editor yêu thích của bạn và điều chỉnh dòng đầu tiên để buộc nó sử dụng Python 3:

  • nano acme-dns-auth.py

Thêm số 3 vào cuối dòng đầu tiên:

acme-dns-certbot.py
#!/usr/bin/env python3 . . . 

Điều này là bắt buộc đảm bảo rằng tập lệnh sử dụng version Python 3 được hỗ trợ mới nhất, thay vì version Python 2 kế thừa.

Sau khi hoàn tất, hãy lưu file .

Cuối cùng, di chuyển tập lệnh vào folder Certbot Let's Encrypt để Certbot có thể tải nó:

  • sudo mv acme-dns-auth.py /etc/letsencrypt/

Trong bước này, bạn đã download và cài đặt hook acme-dns-certbot. Tiếp theo, bạn có thể bắt đầu quá trình cài đặt và làm việc để cấp certificate đầu tiên của bạn .

Bước 3 - Cài đặt acme-dns-certbot

Để bắt đầu sử dụng acme-dns-certbot, bạn cần phải hoàn tất quy trình cài đặt ban đầu và cấp ít nhất một certificate .

Bắt đầu bằng cách chạy Certbot để buộc nó cấp certificate bằng xác thực DNS. Thao tác này sẽ chạy tập lệnh acme-dns-certbot và kích hoạt quá trình cài đặt ban đầu:

  • sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain -d your-domain

Bạn sử dụng đối số --manual để tắt tất cả các tính năng tích hợp tự động của Certbot. Trong trường hợp này, bạn chỉ đang phát hành một certificate thô chứ không phải tự động cài đặt nó trên một dịch vụ.

Bạn cấu hình Certbot để sử dụng móc acme-dns-certbot thông qua đối số --manual-auth-hook . Bạn chạy đối số --preferred-challenges để Certbot sẽ ưu tiên xác thực DNS.

Bạn cũng phải yêu cầu Certbot tạm dừng trước khi cố gắng xác thực certificate mà bạn thực hiện với đối số --debug-challenges . Điều này cho phép bạn cài đặt (các) CNAME DNS CNAME theo yêu cầu của acme-dns-certbot, được đề cập ở phần sau của bước này. Nếu không có đối số --debug-challenges , Certbot sẽ không tạm dừng, vì vậy bạn sẽ không có thời gian để thực hiện thay đổi DNS cần thiết.

Hãy nhớ thay thế từng domain mà bạn muốn sử dụng bằng cách sử dụng đối số -d . Nếu bạn muốn cấp certificate ký tự đại diện, hãy đảm bảo loại bỏ dấu hoa thị ( * ) bằng dấu gạch chéo ngược ( \ ).

Sau khi làm theo các bước Certbot tiêu chuẩn, cuối cùng bạn sẽ được yêu cầu với một thông báo tương tự như sau:

Output
... Output from acme-dns-auth.py: Please add the following CNAME record to your main DNS zone: _acme-challenge.your-domain CNAME a15ce5b2-f170-4c91-97bf-09a5764a88f6.auth.acme-dns.io. Waiting for verification... ...

Bạn cần thêm CNAME DNS CNAME bắt buộc vào cấu hình DNS cho domain của bạn . Điều này sẽ ủy quyền kiểm soát domain phụ _acme-challenge cho dịch vụ ACME DNS, dịch vụ này sẽ cho phép acme-dns-certbot đặt các bản ghi DNS cần thiết để xác thực certificate request .

Nếu bạn đang sử dụng DigitalOcean làm nhà cung cấp DNS của bạn , bạn có thể đặt bản ghi DNS trong console của bạn :

Ảnh chụp màn hình console  DigitalOcean DNS, hiển thị ví dụ về bản ghi CNAME cho ACME DNS

Bạn nên đặt TTL (thời gian tồn tại) khoảng 300 giây để giúp đảm bảo bất kỳ thay đổi nào đối với bản ghi đều được truyền bá nhanh chóng.

Khi bạn đã cấu hình bản ghi DNS, hãy quay lại Certbot và nhấn ENTER để xác thực certificate request và hoàn tất quá trình phát hành.

Quá trình này sẽ mất vài giây và sau đó bạn sẽ thấy thông báo xác nhận certificate đã được cấp:

Output
... Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your-domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your-domain/privkey.pem ...

Bạn đã chạy acme-dns-certbot lần đầu tiên, cài đặt các bản ghi DNS bắt buộc và cấp thành công certificate . Tiếp theo, bạn sẽ cài đặt tự động gia hạn certificate của bạn .

Bước 4 - Sử dụng acme-dns-certbot

Trong bước cuối cùng này, bạn sẽ sử dụng acme-dns-certbot để cấp thêm certificate và gia hạn certificate hiện có.

Thứ nhất, bây giờ bạn đã cấp thành công ít nhất một certificate bằng cách sử dụng acme-dns-certbot, bạn có thể tiếp tục cấp certificate cho các tên DNS giống nhau mà không cần phải thêm CNAME DNS CNAME . Tuy nhiên, nếu bạn muốn lấy certificate cho một domain phụ khác hoặc domain hoàn toàn mới, bạn sẽ được yêu cầu thêm một CNAME khác.

Ví dụ: bạn có thể cấp một certificate ký tự đại diện độc lập khác mà không cần phải thực hiện xác minh lại:

  • sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain

Tuy nhiên, nếu bạn cố gắng cấp certificate cho domain phụ, bạn sẽ được yêu cầu thêm CNAME cho domain phụ:

  • sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d subdomain.your-domain

Điều này sẽ hiển thị một kết quả tương tự như cài đặt ban đầu mà bạn đã thực hiện ở Bước 3:

Output
... Please add the following CNAME record to your main DNS zone: _acme-challenge.subdomain.your-domain CNAME 8450fb54-8e01-4bfe-961a-424befd05088.auth.acme-dns.io. Waiting for verification... ...

Đến đây bạn có thể sử dụng acme-dns-certbot để cấp certificate , bạn cũng nên xem xét quá trình gia hạn.

Khi certificate của bạn sắp hết hạn, Certbot có thể tự động gia hạn chúng cho bạn:

  • sudo certbot renew

Quá trình gia hạn có thể chạy từ đầu đến cuối mà không có sự tương tác của user và sẽ ghi nhớ tất cả các tùy chọn cấu hình mà bạn đã chỉ định trong quá trình cài đặt ban đầu.

Để kiểm tra xem điều này đang hoạt động mà không cần phải đợi cho đến khi gần hết hạn sử dụng, bạn có thể kích hoạt chế độ chạy khô. Điều này sẽ mô phỏng quá trình gia hạn mà không thực hiện bất kỳ thay đổi thực tế nào đối với cấu hình của bạn.

Bạn có thể kích hoạt quá trình chạy khô bằng lệnh renew tiêu chuẩn, nhưng với đối số --dry-run :

  • sudo certbot renew --dry-run

Điều này sẽ xuất ra một cái gì đó tương tự như sau, điều này sẽ đảm bảo quá trình gia hạn đang hoạt động chính xác:

Output
... Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator manual, Installer None Renewing an existing certificate Performing the following challenges: dns-01 challenge for your-domain dns-01 challenge for your-domain Waiting for verification... Cleaning up challenges ...

Trong bước cuối cùng này, bạn đã cấp một certificate khác và sau đó thử nghiệm quy trình gia hạn tự động trong Certbot.

Kết luận

Trong bài viết này, bạn cài đặt Certbot với acme-dns-certbot để cấp certificate sử dụng xác thực DNS. Điều này mở ra khả năng sử dụng các certificate ký tự đại diện cũng như quản lý một dung lượng lớn các web server riêng biệt có thể nằm sau bộ cân bằng tải.

Đảm bảo theo dõi kho lưu trữ acme-dns-certbot để biết bất kỳ bản cập nhật nào đối với tập lệnh, vì bạn luôn nên chạy version được hỗ trợ mới nhất.

Nếu bạn muốn tìm hiểu thêm về acme-dns-certbot, bạn có thể cần xem lại tài liệu cho dự án acme-dns, là phần tử phía server của acme-dns-certbot:

Phần mềm acme-dns cũng có thể tự lưu trữ, điều này có thể có lợi nếu bạn đang hoạt động trong môi trường phức tạp hoặc bảo mật cao.

Ngoài ra, bạn có thể tìm hiểu chi tiết kỹ thuật của xác thực ACME DNS bằng cách xem lại phần có liên quan của tài liệu RFC chính thức trình bày cách thức hoạt động của quy trình:


Tags:

Các tin liên quan

Cách cài đặt Jitsi Meet trên Ubuntu 18.04
2020-05-28
Cách cài đặt và bảo mật Grafana trên Ubuntu 20.04
2020-05-28
Cách cài đặt và cấu hình Postfix trên Ubuntu 20.04
2020-05-21
Cách cài đặt Composer trên Ubuntu 20.04 [Quickstart]
2020-05-19
Cách cài đặt R trên Ubuntu 20.04 [Khởi động nhanh]
2020-05-19
Cách cài đặt và cấu hình Nextcloud trên Ubuntu 20.04
2020-05-18
Cách cài đặt và cấu hình Ansible trên Ubuntu 20.04
2020-05-15
Cách cài đặt R trên Ubuntu 18.04 [Khởi động nhanh]
2020-05-14
Cách thiết lập NFS Mount trên Ubuntu 20.04
2020-05-14
Cách cài đặt R trên Ubuntu 18.04
2020-05-14