Cài đặt chứng chỉ Let’s Encrypt SSL cho Web trên VPS dùng HocVPS Script

Xin chào các bạn đã quay trở lại với Blog iHuongdan ngày hôm nay. Như ở bài trước thì mình đã hướng dẫn các bạn cách cài đặt HocVPS cho VPS rồi.

Và tiếp theo trong bài viết này, mình sẽ hướng dẫn cho các bạn cách cài đặt chứng chỉ Let’s Encrypt SSL cho website sử dụng Hocvps một cách đơn giản và nhanh chóng nhất.

Như các bạn cũng đã biết thì chứng chỉ Let’s Encrypt SSL là một trong những chứng chỉ ssl hoàn toàn miễn phí. Nó giúp cho website của chúng ta cài đặt https miễn phí tốt nhất.

Và trong bài viết ngày hôm nay, chúng ta sẽ cùng nhau tìm hiểu. Và cài đặt chứng chỉ SSL miễn phí cho website sử dụng VPS dùng Hocvps nhé. Cùng bắt đầu thôi nào mọi người!

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

Công việc đầu tiên mà chúng ta cần làm đó chính là 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

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

Tiếp theo các bạn nhập vào a rồi ấn Enter để chấp nhập các điều khoản.

Sau đó chương trình sẽ hỏi bạn có đồng ý chia sẻ địa chỉ email với đối tác sáng lập Let’s Encrypt hay không?. Bạn có thể chọn y (Yes) hoặc n (No). Ở đây mình chọn yvà ấn Enter.

Tiếp theo các bạn tiến hành nhập vào tên miền cần cài đặt SSL. Các bạn nhập cả 2 phiên bản www và non-www của domain đó vào rồi ấn. (Tại đây nếu các bạn không chạy www thì chỉ cần nhập domain thôi nhé.)

Nếu các bạn thực hiện đúng chương trình sẽ hiện thông báo như sau là thành công:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
 /etc/letsencrypt/live/hocvps.com/fullchain.pem. Your cert will
 expire on 2016-08-23. To obtain a new version of the certificate in
 the future, simply run Certbot again.
 - If you lose your account credentials, you can recover through
 e-mails sent to admin@hocvps.com.
 - 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

#Lưu ý: Các thông tin mình bôi đỏ:

  1. /etc/letsencrypt/live/hocvps.com/: thư mục chứa các file chứng chỉ
  2. 2016-08-23: ngày hết hạn của chứng chỉ (90 ngày từ ngày cài)

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

Như ở trên là chúng ta đã cài đặt SSL cho website đầu tiên. Và nếu để cài đặt cho nhiều website khác các bạn tiến hành chạy 3 lệnh sau:

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

Cấu hình SSL trong file Nginx

Tiếp theo sau khi cài đặt đặt các file chứng chỉ cho domain xong. Công 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à vntraverller.com thì file cấu hình nginx là/etc/nginx/conf.d/vntraveller.com.conf

#Lưu ý: Trong quá trình thực hiện theo các bước trên VPS của bạn. Các bạn hãy nhớ thay dòng vntraveller.com 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/vntraveller.com.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 vntraveller.com; bạn thêm vào đoạn cấu hình SSL như sau:

# SSL
 ssl_certificate /etc/letsencrypt/live/vntraveller.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/vntraveller.com/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.vntraveller.com; thành server_name vntraveller.com www.vntraveller.com;

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

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

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

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

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.vntraveller.com;
# SSL
 ssl_certificate /etc/letsencrypt/live/vntraveller.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/vntraveller.com/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://vntraveller.com$1 permanent;
}

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

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

#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/vntraveller.com/logs/nginx_error.log;
 
 root /home/vntraveller.com/private_html;
 index index.php index.html index.htm;
 server_name vntravller.com;

 error_page 497 https://$server_name:2525$request_uri;
 ssl_certificate /etc/letsencrypt/live/vntravller.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/vntravller.com/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/vntravller.com/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.vntraveller.com;
# SSL
 ssl_certificate /etc/letsencrypt/live/vntraveller.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/vntraveller.com/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://vntraveller.com$1 permanent;
}
server {
 listen 80;
 
 server_name vntraveller.com www.vntraveller.com;
 rewrite ^(.*) https://vntraveller.com$1 permanent;
}

server {
 listen 443 ssl default_server;
 
 # access_log off;
 access_log /home/vntraveller.com/logs/access.log;
 # error_log off;
 error_log /home/vntraveller.com/logs/error.log;
 
 root /home/vntraveller.com/public_html;
 index index.php index.html index.htm;
 server_name vntraveller.com;
 
 # SSL
 ssl_certificate /etc/letsencrypt/live/vntraveller.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/vntraveller.com/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/vntraveller.com/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/vntraveller.com/logs/nginx_error.log;
 
 root /home/vntraveller.com/private_html;
 index index.php index.html index.htm;
 server_name vntraveller.com;
 
 error_page 497 https://$server_name:2525$request_uri;
 ssl_certificate /etc/letsencrypt/live/vntraveller.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/vntraveller.com/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/vntraveller.com/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ả

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

Ở trên đây thì chúng ta đã cài đặt thành công chứng chỉ SSL cho website của chúng ta rồi. Nhưng đây là chứng chỉ SSL miễn phí nên nó sẽ hết hạn trong vòng 90 ngày. Do vậy nếu các bạn muốn sử dụng tiếp sẽ phải thực hiện gia hạn chứng chỉ SSL.

Do đó nếu các bạn không muốn thao tác và để vps tự động gia hạn. Các bạn tiến hành thực hiện 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

Tổng kết

Như vậy là trên đây mình đã hướng dẫn các bạn cách cài đặt SSL miễn phí cho website sử dụng hocvps rồi. Hi vọng với chút thông tin nhỏ này sẽ giúp các bạn có thể tự cài đặt SSL https miễn phí cho website sử dụng Hocvps trên VPS thành công. Chúc các bạn thành công!

5/5 - (4 bình chọn)