Let's Encrypt DomainFactory

Một số gói hosting dùng chung với cPanel không cung cấp AutoSSL , hoặc chỉ có trong các gói giá cao hơn. Do đó, bạn không thể cấp chứng chỉ Let's Encrypt miễn phí thông qua giao diện cPanel, và tất cả các tên miền đều bị giới hạn ở chứng chỉ tự ký. Trình duyệt hiển thị trang này là "không an toàn". Giải pháp: tự lấy chứng chỉ bằng acme.sh và cài đặt nó thông qua UAPI của cPanel – tự động gia hạn, hoàn toàn không cần AutoSSL.


HTTPS từ lâu đã là bắt buộc. Vì vậy, càng gây khó chịu hơn khi gói dịch vụ lưu trữ của bạn không cung cấp cách thuận tiện để có được chứng chỉ miễn phí. Điều này xảy ra thường xuyên hơn bạn nghĩ, ví dụ như với các gói dịch vụ giá rẻ hoặc sau khi thay đổi gói dịch vụ mà chứng chỉ đột nhiên không còn được bao gồm. Tuy nhiên, lỗ hổng này có thể được khắc phục một cách hiệu quả và vĩnh viễn chỉ với một vài dòng mã trong shell – quy trình đầy đủ được mô tả bên dưới.

1. Đăng nhập qua SSH

ssh -p <port> <user>@example.com

2. Cài đặt acme.sh

curl https://get.acme.sh | sh -s email=me@example.com
source ~/.bashrc

3. Đặt Let's Encrypt làm CA (Cơ quan cấp chứng chỉ).

acme.sh --set-default-ca --server letsencrypt

4. Cấp giấy chứng nhận

acme.sh --issue -d example.com -d www.example.com -w ~/public_html

5. Cài đặt vào cPanel

acme.sh --deploy -d example.com --deploy-hook cpanel_uapi

6. Kiểm tra

uapi SSL installed_hosts
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
     | openssl x509 -noout -issuer -dates

Hook này ghi chứng chỉ vào máy chủ ảo thích hợp thông qua UAPI. Các thiết lập triển khai được lưu lại – từ giờ trở đi, cron sẽ tự động gia hạn và cài đặt mọi thứ trước khi hết hạn. Tổ chức phát hành là "Let's Encrypt", và ngày hết hạn là khoảng 90 ngày nữa. Nếu chứng chỉ tự ký cũ vẫn xuất hiện, việc tải lại trang trên trình duyệt thường sẽ khắc phục được sự cố – chứng chỉ trước đó có thể được lưu tạm thời trong bộ nhớ cache.

Một số nhà cung cấp dịch vụ lưu trữ tự thiết lập hook cPanel riêng. install_ssl và đáp lại bằng một câu đại loại như thế này adminbin Cpanel/hooks2/...: exit 255. acme.sh vẫn báo cáo "đã triển khai thành công" - và điều đó là chính xác. Trong trường hợp này, hook thất bại do một bước tiếp theo (chẳng hạn như thông báo nội bộ hoặc tác vụ đồng bộ hóa của nhà cung cấp dịch vụ lưu trữ), chứ không phải do quá trình cài đặt thực tế.

Đối với các tên miền có dấu umlaut, acme.sh lưu trữ chứng chỉ nội bộ dưới dạng Punycode (xn--…), trong khi bộ so khớp tự động của hook so sánh dạng Unicode. Kết quả: "đã triển khai đến 0 trong số 0 trang web" – không có gì được cài đặt. Điều nguy hiểm là acme.sh cũng báo cáo "Thành công" ở đây, vì vậy lỗi này rất dễ bị bỏ qua. Giải pháp: Làm việc trực tiếp với miền Punycode và tắt tính năng so khớp tự động.:

python3 -c "import sys;print(sys.argv[1].encode('idna').decode())" hallöle.de
acme.sh --issue -d xn--hallle-zxa.de -d www.xn--hallle-zxa.de -w ~/public_html
export DEPLOY_CPANEL_AUTO_ENABLED='false'
acme.sh --deploy -d xn--hallle-zxa.de --deploy-hook cpanel_uapi

Với quyền truy cập SSH, bạn không cần AutoSSL: acme.sh sẽ cấp chứng chỉ, và chứng chỉ đó sẽ được cấp. cpanel_uapiTùy chọn -Hook sẽ cài đặt nó, và tác vụ định kỳ (cron job) đi kèm sẽ tự động cập nhật. Sau khi thiết lập xong, dịch vụ HTTPS miễn phí sẽ hoạt động liên tục mà không cần can thiệp. Những người đầu tư công sức ban đầu sẽ tiết kiệm được mọi thao tác gia hạn thủ công trong tương lai – và có thể mở rộng giải pháp tương tự cho bất kỳ tên miền nào khác trong cùng một tài khoản chỉ bằng một lệnh duy nhất.

Trở lại