1. Câu chuyện:
Vừa rồi, các website (kể cả cái blog này) của mình chạy trên CyberPanel chết sạch, nguyên nhân là do SSL hết hạn mà CyberPanel không gia hạn được.
Search Google 7×7 49 lần không ra thông tin gì, log CyberPanel khi gia hạn chỉ có mỗi 1 dòng ngắn ngủn như sau, không biết đường nào mà lần.
2. Tìm lỗi:
Nhìn trên log, mình phát hiện CyberPanel đang dùng acme.sh để lấy cert. Acme.sh là một script khá nổi tiếng dùng để get SSL miễn phí từ các nhà cung cấp. Mình quyết định thử get cert bằng tay xem chuyện gì sẽ xảy ra, và câu chuyện diễn ra như sau:
/root/.acme.sh/acme.sh --issue -d <censored> -d <censored> --cert-file /etc/letsencrypt/live/<censored>/cert.pem --key-file /etc/letsencrypt/live/<censored>/privkey.pem --fullchain-file /etc/letsencrypt/live/<censored>/fullchain.pem -w /home/<censored>/public_html --force
Ơ, thế quái nào lại là ZeroSSL, trước giờ tên miền mình dùng SSL của Let’s Encrypt cơ mà. Quyết định mò vào Github của acme.sh tìm hiểu thì… acme.sh đã thay đổi nhà cung cấp SSL mặc định từ Let’s Encrypt sang ZeroSSL từ ngày 15/6/2021 (chi tiết tại đây: https://github.com/acmesh-official/acme.sh/wiki/Change-default-CA-to-ZeroSSL).
Let’s Encrypt vẫn được hỗ trợ, tuy nhiên cần phải thêm argument –server letsencrypt thì nó mới lấy cert của Let’s Encrypt. Và ơn giời, CyberPanel khi gọi Acme không hề có argument này.
Vậy, tại sao lại Fail? Vấn đề ở đây là nếu Let’s Encrypt cho phép issue cert thoải mái mà không cần đăng ký trước, thì ZeroSSL lại khác. ZeroSSL yêu cầu bạn đăng ký tài khoản bằng địa chỉ email trước rồi mới được xin cert. Do thông báo này không được xuất ra log hay hiển thị trên giao diện Cyber Panel nên nếu người dùng không chạy lệnh Issue bằng tay sẽ không thể nào biết được chuyện gì đang xảy ra.
3. Xử lý:
Khi đã tìm ra được lý do rồi thì việc xử lý vô cùng đơn giản. Bạn có 2 hướng: hoặc là sửa lại script acme.sh để thêm –server letsencrypt mặc định khi chạy, hoặc đăng ký email với ZeroSSL để có thể xin được cert.
Ở đây, mình chọn các thứ 2, vì với cách đầu tiên mỗi lần các bạn update version CyberPanel mà có cập nhật luôn acme.sh thì bạn phải vào sửa lại, rất bất tiện, và nó cũng không chính thống.
Đầu tiên, các bạn chạy command như hướng dẫn của ZeroSSL để đăng ký email với họ, ZeroSSL sẽ trả về Thumbprint:
/root/.acme.sh/acme.sh --register-account -m [email protected]
Sau khi đăng ký xong thì bạn có thể lấy Cert được rồi, kể cả qua SSH hay dùng giao diện CyberPanel:
Chúc các bạn vui với sự cố ngoài ý muốn này. Hi vọng lần sau các ông CyberPanel sẽ viết Changelog kỹ hơn, đến khổ.