Về Let’s Encrypt, tạo mới, gia hạn Certificate miễn phí

2
1352

Trước đây, mình đã có bài viết về tạo, gia hạn Cert của Letsencrypt, tuy nhiên chưa đầy đủ lắm. Vì vậy mình viết lại bài này để giải thích rõ hơn, cũng như gia hạn, tạo mới không cần stop web service.

1. Letsencrypt là gì?

Let’s Encrypt là một chương trình được tài trợ bởi nhiều đơn vị, quỹ phát triển lớn trên thế giới (bao gồm cả Google, Akamai, Facebook…) Mục đích cuả nó là giúp Internet an toàn hơn bằng cách cung cấp miễn phí các certificate cho website, ứng dụng…

Đặc điểm của Certificate Let’s Encrypt:

– Miễn phí, không giới hạn số lượng đăng ký trên một tài khoản.

– Hết hạn sau 3 tháng, gia hạn miễn phí

2. Lý giải thêm một số nguyên tắc hoạt động, cách tạo và gia hạn

Lưu ý, để tạo và gia hạn cert của Lets, người quản trị phải chứng minh quyền sở hữu tên miền bằng cách trỏ tên miền về đúng IP máy chủ muốn tạo và gia hạn. Đương nhiên, nếu bạn không phải là chủ tên miền thì làm sao nó cho phép.

Lets có 3 cách chính để tạo và gia hạn cert. Nên thống nhất sử dụng 1 cách để việc gia hạn dễ dàng, chuẩn xác, dễ đặt lịch tự động người quản trị không phải quan tâm nhiều khi quản lý một số lượng lớn website.

– Chế độ standalone:

Đây là chế độ độc lập, bạn không cần cài một web server lên trước (như nginx, apache), chỉ cần trỏ tên miền về server, cài đặt lets là tạo được cert. Để tạo cert, Lets sẽ tạo ra 1 máy chủ web ảo bằng Python, chiếm cổng 443 của server. Vì vậy, cần phải stop mọi dịch vụ nào đang chiếm cổng 443 thì mới tạo và gia hạn được cert. Đó là lý do vì sao bạn thường được hướng dẫn stop nginx, apache khi tạo và gia hạn.

Chế độ này thường được hướng dẫn trên mạng nhưng nhược điểm cuả nó là phải stop web service đang chạy kể cả khi gia hạn. Không phải lúc nào bạn cũng được phép downtime như vậy, nhất là nếu server đó chạy rất nhiều web.

– Chế độ webroot

Đây là chế độ mà bắt buộc phải có sẵn một web service, trỏ website trước, vì vậy nó không cần tạo ra 1 máy chủ web ảo chiếm port 443 như chế độ standalone, vì vậy không cần stop web service khi tạo và gia hạn. Việc tạo và gia hạn sẽ được chứng thực thông qua 1 đường link có dạng tenmien.com/.well-known. Đơn giản bạn có thể hiểu nếu trên web của bạn có đường dẫn này thì máy chủ Letsencrypt sẽ xác thực cho bạn và cho phép tạo, gia hạn…

– Chế độ Manual

Tương tự chế độ Webroot nhưng nó sẽ hỏi các câu hỏi và điền bằng tay >> không chơi tự động được. Nên mình không quan tâm phần này.

3. Tạo certificate mới

Bước 1: Cài đặt Letsencrypt

Cài đặt Lets có nhiều cách, bạn có thể cài certbot https://certbot.eff.org/

Tuy nhiên theo mình nên sử dụng cách clone source trên git về thì hơn (dễ update sau này)

Bước 2: Tạo vhost tạm (mình làm trên nginx)

Vì sao lại tạo vhost tạm? Mình cho là làm thế nhanh hơn là chỉnh sửa vhost thật trước. Vhost tạm này chỉ dùng để đăng ký lets theo dạng webroot, xong là xóa nó đi thôi.

Lưu ý: location /.well-known/

Đây là phần bắt buộc, mục đích của nó để lets xác thực trang web của bạn khi nó tiến hành tạo hoặc gia hạn trong khi website của bạn vẫn đang chạy (không stop nginx). Lưu ý, thư mục này phải tồn tại thật, và khi gia hạn vẫn phải giữ thư mục này, vì vậy nên dùng 1 thư mục cố định cho mọi tên miền trên server. Ở đây dùng luôn thư mục mặc định của nginx.

Reload nginx để nhận file cấu hình mới này:

Bước 3: Tạo cert mới

cd vào thư mục /opt/letsencrypt đã clone cái source ở bên trên.

Lưu ý thư mục -w giống với thư mục trong location .well-know ở trên.

Bây giờ xóa file vhost vừa tạo ở trên đi, hoặc dùng nó làm vhost thật luôn cũng được.

Cái config này mình lấy mẫu của mình thôi, tùy trường hợp có thể khác.

Restart nginx để apply config mới.

4. Gia hạn certificate

Nếu tất cả tên miền đều được tạo theo cách như trên, thì chỉ cần gõ lệnh:

Đặt cronjob để việc gia hạn này là tự động:

Thêm vào dòng sau và lưu lại:

Dòng này sẽ chạy lệnh gia hạn vào lúc 00:00 ngày mùng 1 của mỗi tháng, reload nginx và xuất ra file log để tiện theo dõi. Như vậy website sẽ không downtime chút nào.

5. Một số thủ thuật

a. Test thử việc tạo, gia hạn:

Nếu bạn gõ lệnh với Letsencrypt sai, lỗi quá nhiều, nó sẽ khóa không cho bạn thao tác trong khoảng 1 tiếng. Vì vậy để thử trước khi thực hiện lệnh (tạo, gia hạn…) thật bạn có thể thêm tùy chọn –dry-run ở cuối câu lệnh. Chẳng hạn:

Lưu ý thêm tùy chọn này thì chỉ là test thôi, làm thật nhớ bỏ nó đi.

b. Gia hạn cho 1 tên miền riêng rẽ

Ví dụ bạn có 10 tên miền trên website, nhưng chỉ muốn gia hạn cho 1 tên miền thôi:

Lưu ý cái webroot giống của bạn nhé.

c. Xóa 1 cert của tên miền để tạo lại

 (chẳng hạn do trước đó tạo theo standalone, muốn chuyển qua webroot) chỉ cần xóa hết các file,thư mục sau:

+ /etc/letsencrypt/renewal/tenmien.conf (file)

+ /etc/letsencrypt/archived/tenmien (directory)

+ /etc/letsencrypt/live/tenmien (directory)

d. Tạo 1 certificate dùng cho nhiều domain.

Nếu bạn không muốn tạo mỗi domain 1 certificate thì có thể tạo 1 lúc nhiều domain luôn bằng cách sử dụng -d domain1.com -d domain2.com …. khi tạo certificate.

Letsencrypt hỗ trợ tới 100 tên miền cho 1 certificate được tạo. Nghĩa là bây giờ bạn sẽ cấu hình tất cả domain trong list trên sử dụng 1 cert trong /etc/letsencrypt/live/domain1.com. Khi gia hạn, tất cả đều được gia hạn cùng lúc.

BÀI TIẾP:

Tự động gia hạn Lets Encrypt Certificate trên HA Proxy không cần stop dịch vụ

2 COMMENTS

LEAVE A REPLY

Please enter your comment!
Please enter your name here