Cài SSL cho website WordPress trên Centos 6 chạy scrip hocvps
Ở bài viết trước mình có giới thiệu cho các bạn cách để cài website WordPress trên VPS rồi. Các bạn có thể đọc lại bài viết đấy ở đây: https://helpdesk.inet.vn/knowledgebase/huong-dan-cai-dat-website-wordpress-tren-vps-centos-os. Tuy nhiên đó mới là bước cài website cơ bản thôi chứ chưa có SSL gì cả. Ở bài viết này mình sẽ hướng dẫn các bạn cài SSL cho những website hôm trước đã thiết lập chạy trên scrip hocvps nhé.
Những thứ cần chuẩn bị:
Như thế là đã đủ công cụ chúng ta sẽ tiến hành cài SSL cho website.
Bước 1: Đăng nhập VPS qua PuTTY
Bật Putty.exe với quyền Administrator => Điền thông tin IP (địa chỉ WAN IP) và Port (cổng SSH)



Đây là giao diện sau khi đã đăng nhập được:

Bước 2: Tải mã nguồn Let’s Encrypt về VPS:
Trước hết là cài git cho VPS:
yum -y install git
Câu lệnh tải mã nguồn đặt ở thư mục cùng tên trên VPS, cụ thể là /opt/letsencrypt:
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Bước 3: Đăng ký chứng chỉ SSL Let’s Encrypt cho domain
Nếu VPS có nhiều domain thì chỉ cần lặp lại các thao tác tương tự để cài nốt nhé. Tiếp theo chúng ta tạm dừng Nginx Webserver trên VPS:
service nginx stop
Rồi chạy lệnh đăng ký SSL cho domain (gọi là Issue SSL Let’s Encrypt):
/opt/letsencrypt/certbot-auto certonly --standalone

Sau đó bạn chờ một lát để Let’s Encrypt cài các thứ cần thiết. Sau đó điền domain + các thứ cần thiết khác để tạo lập SSL

Nếu nó hiện ra một số câu hỏi về tùy chọn của bạn, chỉ cần gõ A (hoặc Y) rồi Enter để chấp nhận là được- và nếu nó hiện như thế này là đã cài đúng cách:

Và ở đây có một số thông tin bạn cần quan tâm đó là:
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/hau.name.vn/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/hau.name.vn/privkey.pem
Your cert will expire on 2020-10-02. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
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
Trong đó:
/etc/letsencrypt/live/hau.name.vn: Thư mục chứa các file chứng chỉ
2020-10-02: ngày hết hạn (chúng ta sẽ cài auto renew ở cuối bài viết)
Nếu VPS có nhiều Websites và bạn muốn đăng ký SSL cho domain khác các bạn chỉ cần tạm tắt Nginx – chạy lại lệnh đăng ký và làm lại quá trình trên cho domain:
# Tạm ngừng nginx
service nginx stop
# Chạy lệnh đăng ký SSL Let's Encrypt cho domain trên VPS
/opt/letsencrypt/certbot-auto certonly --standalone
Bước 4: Cấu hình VPS để sử dụng SSL của Let’s Encrypt cho Website
Bước này ta cần cấu hình VPS – mà cụ thể là cấu hình Nginx Webserver để nó sử dụng chứng chỉ SSL Let’s Encrypt vừa đăng ký ở trên. Ở bước này chúng ta cần Tạo file DH parameters 2048 bit cho VPS.
Chạy 2 lệnh sau:
mkdir /etc/nginx/ssl/
openssl dhparam 2048 -out /etc/nginx/ssl/dhparam.pem
Ở phần này nó sẽ load khá lâu nên các bạn chịu khó chờ cho đến khi báo thành công nhé.

Bước 5: Login vào mã nguồn VPS bằng WinSCP
File cấu hình Nginx trên VPS Linux (CentOS, Ubuntu, …) nằm trên đường dẫn này:
/etc/nginx/conf.d/hau.name.vn.conf
Các bạn mở WinSCP, tạo New Site:


File cấu hình nginx cần chỉnh sửa không nằm trên thư mục home, mà nằm ở thư mục etc. Do đó ta cần trở lại thư mục gốc (root) và vào lại thư mục etc theo đường dẫn:
/etc/nginx/conf.d/www.hau.name.vn.conf

Tiếp theo các bạn chỉnh sửa file cấu hình nginx để dùng SSL Let’s Encrypt. Nhấp chuột phải vào file www.hau.name.vn.conf, chọn Edit để mở code:

Tiếp theo các bạn chỉnh phần #1 server {
File gốc:
server {
listen 80;
server_name hau.name.vn;
rewrite ^(.*) http://www.hau.name.vn$1 permanent;
}
Chỉnh thành:
server {
listen 80;
server_name hau.name.vn www.hau.name.vn;
rewrite ^(.*) https://hau.name.vn$1 permanent;
}
Mục đích là để chuyển toàn bộ địa chỉ có www. về không có www. và tất cả chuyển về giao thức bảo mật https:// - Như vậy khi gõ www.hau.name.vn sẽ chuyển về https://hau.name.vn
Tiếp theo chỉnh phần #2 block server {
Code gốc ở block này là:
server {
listen 80 default_server;
# access_log off;
access_log /home/hau.name.vn/logs/access.log;
# error_log off;
error_log /home/hau.name.vn/logs/error.log;
root /home/hau.name.vn/public_html;
index index.php index.html index.htm;
server_name hau.name.vn;
....
Chỉnh thành:
Ta sẽ đổi listen 80 default_server; thành listen 443 ssl default_server;
Và sau đoạn server_name hau.name.vn; ta thêm các khai báo sau:
# SSL
ssl_certificate /etc/letsencrypt/live/hau.name.vn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hau.name.vn/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
# Improve HTTPS performance with session resumption
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
# DH parameters
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# Enable HSTS
add_header Strict-Transport-Security "max-age=31536000" always;
(LƯU Ý CẦN LÀM: NẾU BẠN CHẠY SSL THÊM LẦN SAU CHO CÁC WEBSITE KHÁC THÌ CÁC BẠN CẦN BỎ THAM SỐ default_server bên cạnh listen 443) - lưu ý là chỉ làm vậy cho những website cài lần thứ 2 trỏ đi nha: - Lần đầu thì không cần.
Đây là file block server 2 hoàn chỉnh khi edit của mình - các bạn có thể tham khảo:
server {
listen 443 ssl default_server;
# access_log off;
access_log /home/hau.name.vn/logs/access.log;
# error_log off;
error_log /home/hau.name.vn/logs/error.log;
root /home/hau.name.vn/public_html;
index index.php index.html index.htm;
server_name hau.name.vn;
# SSL
ssl_certificate /etc/letsencrypt/live/hau.name.vn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hau.name.vn/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
# Improve HTTPS performance with session resumption
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
# DH parameters
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# Enable HSTS
add_header Strict-Transport-Security "max-age=31536000" always;
location / {
try_files $uri $uri/ /index.php?$args;
}
.....
Tiếp theo các bạn chỉnh thêm một block server lên trên cùng nữa là xong:
server {
listen 443 ssl;
server_name www.hau.name.vn;
# SSL
ssl_certificate /etc/letsencrypt/live/hau.name.vn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hau.name.vn/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
rewrite ^(.*) https://hau.name.vn$1 permanent;
}
Sau đó bạn bấm CTR + S nữa là xong phần cấu hình trên WINSCP
Bước 6: Kiểm tra lại cấu hình nginx & enjoy https://
Sau khi kiểm tra lại ok thì các bạn sử dụng lệnh sau:
nginx -t
Nếu tất cả ok thì sẽ có thông báo như thế này:

Rồi, giờ chạy lệnh khởi động lại nginx
service nginx restart
và vào Website tận hưởng thành quả.
Bước 7: Cài gia hạn tự động cho VPS
Cách 1: Thông thường Let’s Encrypt chỉ có thời hạn mặc định là 3 tháng mà thôi

- nếu muốn dùng tiếp các bạn phải làm thủ công. Nếu muốn chạy thủ công bằng tay thì cứ đến gần ngày hết hạn các bạn có thể chạy lệnh này.
/opt/letsencrypt/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"
Cách 2:
Tuy nhiên nếu quản lý nhiều website chạy trên VPS mà làm thủ công thì không ổn - các bạn có thể làm cách khác ổn hơn đó là tự động gia hạn - các bạn có thể làm như sau:
EDITOR=vi crontab -e


Gõ lệnh sau:
30 2 * * * /opt/letsencrypt/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start" >> /var/log/le-renew.log