Cài đặt chứng chỉ SSL cho server Ubuntu
Trước đây mình sử dụng CloudFlare để lấy chứng chỉ HTTPS cho miền của mình, việc setup rất đơn giản tuy nhiên một số nhược điểm khi dùng CloudFlare mà mình thấy như hay bị downtime, bị ảnh hưởng vì IP chung, và sau khi setup thì cần đến 24h để chứng chỉ HTTPS có hiệu lực. Vì thế mình quyết định tự tay cài đặt Let's Encrypt cho VPS của mình (cái này là chứng chỉ miễn phí).
Các bước cần chuẩn bị trước khi cài đặt :
- Tên miền có sẵn và đã trỏ về vps
- Thêm A record cho www
- Cài đặt python 2.7 trở lên (thường thì hệ điều hành Ubuntu 14.04 đã có python version này)
- Cài đặt nginx
Bước 1 - Cài đặt Certbot
Certbot là trình tự động đăng ký và cài đặt ký chứng chỉ Let's Encrypt
Thêm repository
Mã:
sudo add-apt-repository ppa:certbot/certbot
Cập nhật package list
Cài đặt Certbot nginx
Mã:
sudo apt-get install python-certbot-nginx
Vậy là bạn đã cài đặt xong Certbot, bước tiếp theo ;là cấu hình nginx và khởi động Certbot
Bước 2 - Cấu hình Nginx
Certbot sẽ tự động cài đặt và cấu hình SSL cho nginx, tuy nhiên bạn cần cấu hình server block (server_name) trong config trước để Certbot có thể đọc và tự động thiết lập.
Mở tập tin cấu hình Nginx
Mã:
sudo nano /etc/nginx/sites-available/default
Tìm dòng server_name và thay thế _ bằng miền của bạn
Mã:
. . .
server_name example.com www.example.com;
. . .
Kiểm tra xem cấu hình có hợp lệ không
Khi đã cấu hình xong thì bạn restart Nginx
Mã:
sudo service nginx restart
Bước tiếp theo là cập nhật Firewall.
Bước 3 - Cho phép HTTPS thông qua Firewall
Nếu bạn có ufw firewall, bãn sẽ cần cấu hình để cho phép truy cập https.
Xem cấu hình hiện tại
Bạn sẽ thấy cấu hình hiện tại
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Bạn cần cho phép cấu hình Nginx đầy đủ và xóa cấu hình Nginx HTTP
Mã:
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
Kiểm tra lại cấu hình firewall
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Bước 4 - Lấy chứng chỉ SSL
Certbot cung cấp rất nhiều cách để lấy chứng chỉ SSL sử dụng nhiều plgugin khác nhau và hỗ trợ nhiều server khác nhau.
Mã:
sudo certbot --nginx -d example.com -d www.example.com
Nếu là lần đầu đăng ký thì bạn sẽ cần nhập địa chỉ email và đồng ý với chính sách của Let's Encrypt
Sau khi đăng ký thành công thì Certbot sẽ hỏi các bạn về cách thiết lập cấu hình HTTPS
Mã:
Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
1: Không thay đổi cấu hình webserver
2: Chuyển hướng - Chuyển hướng tất cả các kết nối HTTP sang HTTPS
Mình khuyên là sử dụng lựa chọn 1 sau đó cấu hình chuyển hướng bằng tay bởi 1 số bạn có sử dụng reverse proxy.
Sử dụng cấu hình sau để chuyển hướng
Mã:
server {
listen 80;
server_name www.example.com example.com;
return 301 https://$host$request_uri;
}
Sau đó nhấn
Enter.
Sau khi lấy được thành công chứng chỉ và cài đặt cho server nginx sẽ hiện ra thông báo sau
Mã:
Output
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
expire on 2017-10-23. To obtain a new or tweaked version of this
certificate in the future, simply run certbot again with the
"certonly" option. To non-interactively renew *all* of your
certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Chứng chỉ SSL sẽ có thời hạn trong 90 ngày, Certbot sẽ tự động renew chứng chỉ của bạn khi hết hạn.
Bước 5 - Kiểm tra Certbot Auto-Renewal
Để test quá trình renew Certbot có hoạt động hay không, bạn gõ lệnh sau
Mã:
sudo certbot renew --dry-run
Nếu không thấy lỗi nào thì có nghĩa là quá trình tự động renew Certbot đã được thiết lập thành công. Nếu quá trình tự động renew gặp lỗi thì bạn sẽ nhận được email cảnh báo sắp hết hạn từ Let's Encrypt.
Nếu các bạn có câu hỏi gì hay gặp trục trặc trong quá trình cài đặt thì có thể đặt câu hỏi bên dưới, mình sẽ hỗ trợ sớm nhất có thể