Hướng dẫn cài đặt chứng chỉ Let’s Encrypt SSL cho web trên VPS dùng HocVPS Script

5/5 - (2 đánh giá)

Bạn đang chạy web trên VPS sử dụng HocVPS Script để tạo server? Giờ bạn muốn cài đặt SSL cho web chạy trên VPS đó? Vậy hãy làm theo hướng dẫn này để cài đặt chứng chỉ SSL của Let’s Encrypt hoàn toàn miễn phí và được tự động gia hạn SSL.

Let’s Encrypt là nhà cung cấp chứng chỉ số SSL (Certificate Authority) hoàn toàn miễn phí, đã và đang được sử dụng trên rất nhiều website. Hiện tại hầu hết các shared hosting như Hawkhost, AZDIGI, Stablehost,…đều đã tích hợp sẵn Let’s Encrypt trong Cpanel. Và trên blog mình cũng có bài hướng dẫn cài đặt SSL trên Cpanel bạn có thể tham khảo.

Trong bài viết này, Nguyễn Hùng sẽ hướng dẫn bạn cách cài đặt chứng chỉ Let’s Encrypt SSL cho web trên VPS dùng HocVPS Script giúp bạn có thể tự cài đặt SSL cho tất cả các web đang chạy trên server. Nào! Cùng bắt đầu làm theo các bước bên dưới.

Cài đặt chứng chỉ Let’s Encrypt SSL cho web đầu tiên trên VPS

Vì là cài cho web đầu tiên nên bạn phải clone mã nguồn của Let’s Encrypt về thư mục /opt/letsencrypt bằng cách chạy 2 lệnh sau. (CentOS 6 hay 7 đều thực hiện giống nhau).

yum -y install git
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Tiếp theo, để cài đặt Let’s Encrypt mình sẽ sử dụng option --standalone. Bạn chạy lần lượt 3 lệnh sau:

service nginx stop
cd /opt/letsencrypt
./letsencrypt-auto certonly --standalone

Bạn chờ cho Let’s Encrypt cài đặt đầy đủ các công cụ cần thiết. Sau đó nó yêu cầu bạn nhập vào email và ấn Enter để tiếp tục.

huong-dan-cai-dat-lets-encrypt-ssl-cho-vps-1

Nhập vào a rồi ấn Enter để chấp nhập các điều khoản.

Tiếp theo nó sẽ hỏi bạn có đồng ý chia sẻ địa chỉ email với đối tác sáng lập Let’s Encrypt để họ gửi cho bạn những thông tin gì đó. Bạn có thể chọn y (Yes) hoặc n (No). Ở đây mình chọn y và ấn Enter.

Sau đó bạn nhập vào tên miền cần cài đặt SSL. Bạn nhập cả 2 phiên bản wwwnon-www của domain đó vào rồi ấn Enter.

huong-dan-cai-dat-lets-encrypt-ssl-cho-vps-2

Nếu không có lỗi gì xảy ra bạn sẽ nhận được thông báo như sau:

huong-dan-cai-dat-lets-encrypt-ssl-cho-vps-3

Lưu ý các thông tin tô sáng:

  • /etc/letsencrypt/live/nguyenhung.net/: là đường dẫn thư mục chứa các file chứng chỉ.
  • 2018-07-03: ngày hết hạn chứng chỉ (90 ngày từ ngày cài đặt).

Đó là các bước cài cho web đầu tiên trên VPS, từ các web sau để cài đặt SSL bạn chỉ cần làm như sau.

Cài đặt chứng chỉ Let’s Encrypt SSL cho web khác trên VPS

Đối với các web khác trên VPS nếu bạn muốn cài SSL thì chỉ cần chạy 3 lệnh bên dưới rồi nhập domain vào tương tự như ở trên.

service nginx stop
cd /opt/letsencrypt
./letsencrypt-auto certonly --standalone

Cấu hình SSL trong file Nginx

Sau khi cài đặt các file chứng chỉ cho domain xong, việc tiếp theo là chỉnh sửa lại file cấu hình Nginx. Ví dụ tên miền mình vừa cài đặt SSL là nguyenhung.net thì file cấu hình nginx là /etc/nginx/conf.d/nguyenhung.net.conf

Khi làm trên VPS của bạn thì nhớ thay dòng nguyenhung.net thành tên miền của bạn nhé.

Tạo file DH parameters 2048 bit (tạo 1 lần duy nhất trên VPS)

mkdir /etc/nginx/ssl/
openssl dhparam 2048 -out /etc/nginx/ssl/dhparam.pem

Chỉnh sửa cấu hình nginx bằng Nano Editor

nano /etc/nginx/conf.d/nguyenhung.net.conf

Cấu hình SSL xử lý các request

Trong block server { ... } thứ 2 bạn sửa lại như sau:

+) Chuyển listen 80 default_server; thành listen 443 ssl default_server;

Lưu ý: Với domain không phải domain chính bạn chuyển listen 80 default_server; thành listen 443 ssl;

+) Sau dòng server_name nguyenhung.net; bạn thêm vào đoạn cấu hình SSL như sau:

# SSL
 ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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;

Redirect toàn bộ www và non-www từ http sang https

Trong block server { ... } ở trên cùng, bạn sửa lại như sau:

+) Chuyển server_name www.nguyenhung.net; thành server_name nguyenhung.net www.nguyenhung.net;

+) Chuyển rewrite ^(.*) http://nguyenhung.net$1 permanent; thành rewrite ^(.*) https://nguyenhung.net$1 permanent;

Kết quả toàn bộ block server { ... } ở trên cùng sẽ như sau:

server {
 listen 80; 
 server_name nguyenhung.net www.nguyenhung.net;
 rewrite ^(.*) https://nguyenhung.net$1 permanent;
}

Block này có tác dụng giúp tự động chuyển https://nguyenhung.net và http://www.nguyenhung.net sang https://nguyenhung.net

Redirect toàn bộ www https sang https

Thêm mới block server { ... } ở trên cùng

server {
 listen 443 ssl;
 server_name www.nguyenhung.net;
# SSL
 ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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://nguyenhung.net$1 permanent;
}

Block này có tác dụng giúp tự động chuyển https://www.nguyenhung.net sang https://nguyenhung.net

Cấu hình SSL với port quản lý HocVPS Script Admin

Đây là bước tùy chọn. Sau khi cài SSL cho domain chính bạn sẽ không truy cập được vào các công cụ HocVPS Script Admin thông qua domain ở địa chỉ (https://domain.com:2525) mà bạn chỉ có thể truy cập thông qua địa chỉ IP (https://dia-chi-ip:2525). Nếu bạn muốn dùng domain để truy cập các công cụ HocVPS Script Admin thì bạn thao tác theo các bước bên dưới.

Lưu ý: Bước này chỉ thiết lập đối với domain chính dùng để cài HocVPS Script – Domain phụ KHÔNG được thiết lập.

Giả sử khi cài HocVPS Script mình để port là 2525

Bạn hãy tìm block server { ... } cuối cùng có dòng listen 2525;

server {
 listen 2525 ssl;
 
 access_log off;
 log_not_found off;
 error_log /home/nguyenhung.net/logs/nginx_error.log;
 
 root /home/nguyenhung.net/private_html;
 index index.php index.html index.htm;
 server_name nguyenhung.net;

 error_page 497 https://$server_name:2525$request_uri;
 ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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;

 auth_basic "Restricted";
 auth_basic_user_file /home/nguyenhung.net/private_html/hocvps/.htpasswd;

Bây giờ thì bạn đã có thể truy cập HocVPS Script Admin bằng https://domain.com:2525

Cấu hình file Nginx cuối cùng của domain chính như sau:

server {
 listen 443 ssl;
 server_name www.nguyenhung.net;
# SSL
 ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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://nguyenhung.net$1 permanent;
}
server {
 listen 80;
 
 server_name nguyenhung.net www.nguyenhung.net;
 rewrite ^(.*) https://nguyenhung.net$1 permanent;
}

server {
 listen 443 ssl default_server;
 
 # access_log off;
 access_log /home/nguyenhung.net/logs/access.log;
 # error_log off;
 error_log /home/nguyenhung.net/logs/error.log;
 
 root /home/nguyenhung.net/public_html;
 index index.php index.html index.htm;
 server_name nguyenhung.net;
 
 # SSL
 ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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;
 }
 
 # Custom configuration
 include /home/nguyenhung.net/public_html/*.conf;
 
 location ~ \.php$ {
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 include /etc/nginx/fastcgi_params;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_connect_timeout 1000;
 fastcgi_send_timeout 1000;
 fastcgi_read_timeout 1000;
 fastcgi_buffer_size 256k;
 fastcgi_buffers 4 256k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_intercept_errors on;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 }
 
 location /nginx_status {
 stub_status on;
 access_log off;
 allow 127.0.0.1;
 allow 45.77.94.237;
 deny all;
 }
 
 location /php_status {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include /etc/nginx/fastcgi_params;
 allow 127.0.0.1;
 allow 45.77.94.237;
 deny all;
 }
 
 # Disable .htaccess and other hidden files
 location ~ /\.(?!well-known).* {
 deny all;
 access_log off;
 log_not_found off;
 }
 
 location = /favicon.ico {
 log_not_found off;
 access_log off;
 }
 
 location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }
 
 location ~* \.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|eot|svg|ttf|woff)$ {
 gzip_static off;
 add_header Pragma public;
 add_header Cache-Control "public, must-revalidate, proxy-revalidate";
 access_log off;
 expires 30d;
 break;
 }

location ~* \.(txt|js|css)$ {
 add_header Pragma public;
 add_header Cache-Control "public, must-revalidate, proxy-revalidate";
 access_log off;
 expires 30d;
 break;
 }
}

server {
 listen 2525 ssl;
 
 access_log off;
 log_not_found off;
 error_log /home/nguyenhung.net/logs/nginx_error.log;
 
 root /home/nguyenhung.net/private_html;
 index index.php index.html index.htm;
 server_name nguyenhung.net;
 
 error_page 497 https://$server_name:2525$request_uri;
 ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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;
 
 auth_basic "Restricted";
 auth_basic_user_file /home/nguyenhung.net/private_html/hocvps/.htpasswd;
 
 location / {
 autoindex on;
 try_files $uri $uri/ /index.php;
 }
 
 location ~ \.php$ {
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 include /etc/nginx/fastcgi_params;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_connect_timeout 1000;
 fastcgi_send_timeout 1000;
 fastcgi_read_timeout 1000;
 fastcgi_buffer_size 256k;
 fastcgi_buffers 4 256k;
 fastcgi_busy_buffers_size 256k;
 fastcgi_temp_file_write_size 256k;
 fastcgi_intercept_errors on;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 }
 
 location ~ /\. {
 deny all;
 }
}

Kiểm tra lại cấu hình file Nginx

nginx -t

Nếu nhận được thông báo như sau là OK

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Khởi động lại Nginx

service nginx restart

Bây giờ bạn truy cập vào domain và xem thành quả

huong-dan-cai-dat-lets-encrypt-ssl-cho-vps-4

Lưu ý: Bạn phải chuyển toàn bộ link image, js, css từ http:// sang https:// thì tất cả các link trên web mới có biểu tượng màu xanh. Bạn có thể xem hướng dẫn cài đặt chuyển từ HTTP sang HTTPS cho web WordPress trong phần cuối bài viết này.

Cài đặt tự động gia hạn Let’s Encrypt SSL

Như ở trên mình cũng đã nói, chứng chỉ Let’s Encrypt SSL sẽ hết hạn sau 90 ngày kể từ ngày cài đặt. Vì vậy chúng ta sẽ sử dụng crontab để thiết lập tự động gia hạn chứng chỉ SSL bằng cách làm như sau:

Mở file cấu hình crontab

EDITOR=nano crontab -e

Dán đoạn code sau vào cửa sổ ZOC Terminal

15 1 * * * /opt/letsencrypt/letsencrypt-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start" >> /var/log/le-renew.log

Nhấn Ctrl+O -> Enter để Lưu và Ctrl+X để thoát. Bạn thấy thông báo như sau là OK.

crontab: installing new crontab

Trong đoạn code trên mình thiết lập crontab chạy lệnh gia hạn Let’s Encrypt SSL vào lúc 1h15 hàng ngày và kiểm tra xem nếu hết hạn thì sẽ tự động gia hạn.

Đó là tất cả những gì mình hướng dẫn để bạn cài SSL miễn phí của Let’s Encrypt trên VPS. Nếu bạn có dự định chuyển sang dùng SSL trả phí thì hãy tham khảo bài viết hướng dẫn mua SSL và cài đặt SSL trả phí với giá rẻ nhất mình đã chia sẻ trên blog Nguyễn Hùng nhé.

Lời kết

Vậy là mình đã hướng dẫn bạn cài đặt chứng chỉ Let’s Encrypt SSL cho web chạy trên VPS sử dụng HocVPS Script tạo server. Với hướng dẫn này bạn sẽ được sử dụng SSL miễn phí từ Let’s Encrypt trọn đời. Còn chờ đợi gì nữa mà không cài đặt SSL cho web của bạn ngay đi. Chúc bạn thành công!

Nguyễn Hùng

Internet là nơi mình học được những gì về Wordpress, SEO, SEM, MMO và kiến thức máy tính. Những chia sẻ của mình là những thứ mình học được và đã làm thành công, có thể nó chưa được hoàn hảo nhưng nó sẽ hữu ích với bạn.

Nhận thông báo
Thông báo qua email khi
guest

17 Bình luận
Phản hồi nội tuyến
Xem tất cả bình luận
quoc

bên mình có nhận cài ssl và config luôn không ạ

Tinh

Kiểm tra lại thấy thêm hàng trên nữa. bị gì và khắc phục thế nào đây A Nguyễn Hùng
nginx -t
nginx: [warn] conflicting server name “www.webtoi.net” on 0.0.0.0:443, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Đỗ Văn Dũng

Bác ơi, bác có Video hướng dẫn ko ạ, em xem những ko hiểu gì thêm vào đâu híc, e mới tập tành bác ạ

Đỗ Văn Dũng

thanks bác ạ, hóng video của bác hì

Nguyên

phí gia hạn cho Let’s Encrypt SSL bao nhiêu 1 năm vậy bác nhỉ. và có sử dụng cho nhiều domain hay chỉ dùng cho 1 domain thôi bác.

Minh Nguyen

Hi Hùng,
Mình nhờ người quen cài SSL trên Vultr, dùng VPSSIM, đã hoạt động tốt.
Bây giờ mình muốn cài thêm domain mới, bạn có thể hướng dẫn giùm được k. Nếu được, chỉ mình cách đơn giản nhất nhé (mình k phải dân IT). Tks bạn!
(nếu dài quá thì gửi mail mình nhé)

blue

cái này còn có thể cài không thế pro? mình cài trên apache web panel thì thế nào?

anh tuan

Mình là newbie mới cài cái web trên vps vultr, nhưng không biết cài ssl của nó như thế nào cả! bạn có thể hướng dẫn không? Tìm trên mạng không thấy hướng dẫn, và gõ mấy câu lệnh đó vô chỗ nào vậy? Xin cảm ơn

Tiến Ban

Anh Hùng có thể cho em hỏi là em dùng vps vultr nhưng khi cài đặt đều bị lỗi. Dù đã reinstall trên vps để bắt đầu cài lại từ đầu rồi nhưng vẫn bị lỗi ạ.