blog-details

Hướng dẫn cài SSL Let’s Encrypt cho VPS dễ dàng nhất

Chúng ta sẽ có một bài viết riêng để tìm hiểu kỹ về chứng chỉ bảo mật SSL, các loại SSL và tìm hiểu cụ thể về Let’s Encrypt.

Trong bài này, ATC chỉ giới thiệu sơ qua về Let’s Encrypt, chủ yếu vẫn là hướng dẫn cài nhanh SSL Let’s Encrypt trên VPS.

Let’s Encrypt là gì?

Let’s Encrypt là chứng chỉ bảo mật SSL phi lợi nhuận phổ biến nhất thế giới, được bảo trợ bởi các tập đoàn công nghệ lớn như Google, Cisco, Mozilla…

Lets Encrypt là gì

 

Vì sao nên dùng Let’s Encrypt SSL

Không phải ngẫu nhiên mà Let’s Encrypt SSL trở thành chứng chỉ bảo mật phổ biến nhất thế giới, và được tin dùng trên rất nhiều Website lớn:

  • Let’s Encrypt SSL miễn phí hoàn toàn, luôn được cập nhật tính năng thường xuyên và có tính ổn định cao.
  • Let’s Encrypt không hề kém cạnh, thậm chí còn uy tín hơn nhiều chứng chỉ SSL trả phí, nên hầu hết các trình duyệt phổ biến đều tin tưởng Let’s Encrypt SSL.
  • Còn so với các chứng chỉ miễn phí như Flexible SSL của CloudFlare hay các loại chứng chỉ SSL self-signed (SSL tự ký), thì Let’s Encrypt tốt hơn nhiều.

Qui trình cài Let’s Encrypt SSL

Để cài Let’s Encrypt SSL cho mọi Website, ta cần làm 2 bước:

  1. Đăng ký miễn phí một tài khoản Let’s Encrypt, các thông tin về chứng chỉ, nhắc gia hạn, … sẽ được gởi vào email cho bạn.
  2. Tích hợp mã nguồn Let’s Encrypt SSL vào server và khai báo giao thức https:// cho Website.

Hiện nay hầu hết các dịch vụ Shared Hosting với các phần mềm host control panel như cPanel, Direct-Admin (DA), Plesk đều tích hợp sẵn chức năng tự động đăng ký Let’s Encrypt SSL khi thêm website vào Hosting. Tham khảo:

  • Cài SSL tự động trên Hosting cPanel

Riêng VPS, ta phải tự làm 2 bước đã đề cập ở trên, và bước thứ 2 thường khó khăn cho người dùng phổ thông, vì công đoạn thêm code vào Server (VPS) và khai báo https:// cho web phải làm trực tiếp trên giao diện dòng lệnh của Linux.

Do vậy nên trong bài này, VHW hướng dẫn bạn cách làm nhanh, hiệu quả 100% và chỉ cần copy/ paste trong 5 phút mà thôi.

Cài SSL Let’s Encrypt trên VPS

Hiện nay số lượng người sử dụng hocvps script để cài đặt và cấu hình nhanh VPS rất lớn, do đó VHW Team ưu tiên hướng dẫn cài nhanh Let’s Encrypt SSL trên VPS sử dụng HocVPS trước, thời gian tới sẽ hướng dẫn cho CentminMod và LEMP Stack/ LAMP Stack và các shellcript phổ biến khác.

Tham khảo:

  • Cài đặt Webserver cho VPS trong 5 phút với HocVPS

Công việc của chúng ta đơn giản như sau:

  1. Tải SSL Let’s Encrypt về VPS, đăng ký một tài khoản Let’s Encrypt (chỉ bằng email) ngay trên VPS
  2. Cấu hình VPS để sử dụng chứng chỉ SSL vừa đăng ký

Nếu bạn đăng chạy Website WordPress trên VPS, chúng ta sẽ có thêm một bước nữa là cài plugin Really Simple SSL để nó tự động cấu hình giao thức bảo mật https:// cho website.

Chuẩn bị trước khi cài SSL Let’s Encrypt cho VPS

Trỏ domain về VPS

Để xác thực chứng chỉ SSL Let’s Encrypt, bạn cần trỏ domain về IP của VPS trước, và lưu ý nếu đang dùng dịch vụ CDN (ví dụ CloudFlare CDN) thì cần phải tạm tắt CDN trước, vì domain phải trỏ trực tiếp tới IP của VPS chứ không phải qua IP của dịch vụ CDN.

Tắt CDN CloudFlare

Xem hướng dẫn:

Cài các phần mềm truy cập VPS từ xa

Trước khi thực hiện, bạn cần chuẩn bị các phần mềm miễn phí (rất nhẹ và cài chỉ vài giây):

  • Cài PuTTY trên máy tính: PuTTY là phần mềm giúp truy cập vào VPS từ xa, PuTTY hỗ trợ copy/ paste các dòng lệnh, bạn không cần phải gõ lệnh như khi dùng Console của VPS.
  • Cài WinSCP trên mấy tính: WinSCP là phần mềm FTP nổi tiếng, chúng ta sẽ login vào mã nguồn của VPS và mở file cấu hình để khai báo Let’s Encrypt SSL, thay vì phải dùng dòng lệnh như khi thực hiện trên trình soạn thảo vi hay nano của HĐH Linux trên VPS
  • Cài Notepad++ trên máy tính: chúng ta sẽ dùng Editor này để khai báo các dòng code cấu hình Let’s Encrypt SSL cho VPS, đặc biệt tính năng find & replace giúp bạn không cần tự code dòng nào cả.

Hãy tải theo link: PuTTY, WinSCP, Notepad++ và cài đặt để sẵn sàng nhé!

Bắt đầu thôi:

Bước 1 – Tải mã nguồn Let’s Encrypt về VPS & Đăng ký tài khoản

Lưu ý mọi lệnh dưới đây bạn đều copy từ bài này, rồi click chuột phải để dán (paste) vào PuTTY thay vì phải gõ (không nên gõ vì nếu bạn gõ thiếu hoặc lỗi, mọi thứ sẽ phức tạp để sửa lại).

Sau khi paste lệnh vào PuTTY, bạn cần gõ Enter để thực thi lệnh.

Đăng nhập VPS bằng PuTTY

Đầu tiên, ta cần truy cập vào VPS qua phần mềm PuTTY, mở PuTTY lên, nhập địa chỉ ip (của VPS), port truy cập, mặc định port truy cập của Linux là 22 nhưng sau khi cài hocvps, thì port được đổi thành 2222 để bảo mật hơn, do đó bạn cần nhập port 2222 :

Truy cập VPS bằng PuTTY

Nếu có thông tin cảnh báo về bảo mật, hãy nhấp Yes để tiếp tục:

Xác nhận đăng nhập VPS qua PuTTY

Vào VPS, bạn cần login với quyền root (và password root), bạn có thể gõ password, lưu ý rằng password trong Linux không bao giờ hiển thị, nên để chắc ăn bạn gõ pass vào notepad, rồi copy, nhấp chuột phải vào màn hình PuTTY để paste password:

Đăng nhập VPS qua PuT

Cần cẩn thận khi nhập pass vì đa số các dịch vụ VPS uy tín, khi bạn thử sai pass root 1 lần thì nó sẽ tạm thời chặn IP của bạn, nên phải chờ khá lâu mới login lại được.

Tải mã nguồn Let’s Encrypt về VPS

Chúng ta sẽ dùng lệnh tải mã nguồn Let’s Encryp từ Github và đặt ở thư mục cùng tên trên VPS, cụ thể là /opt/letsencrypt

Trước hết là cài git cho VPS:

yum -y install git

Rồi tải mã nguồn về:

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Tải mã nguồn Lets Encrypt về VPS

 

Đăng ký chứng chỉ SSL Let’s Encrypt cho domain

Sau khi có mã nguồn Let’s Encrypt, ta sẽ đăng ký chứng chỉ SSL của Let’s Encrypt cho domain trên VPS, bạn có thể đăng ký cho nhiều domain (website) trên cùng VPS bằng cách lặp lại các bước tương tự.

Từ domain thứ 2 trở đi, không cần phải tải mã nguồn Let’s Encrypt về VPS nữa vì nó đã có sẵn rồi.

Trước hết 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

Nhớ copy/ paste (click chuột phải vào cửa sổ PuTTY) rồi gõ Enter từng lệnh nhé!

Clone Git Lets Encrypt về VPS

Chờ một lúc để Let’s Encrypt cài đặt các công cụ cần thiết, rồi sẽ có thông báo yêu cầu bạn nhập email dùng để đăng ký chứng chỉ Let’s Encrypt SSL, email này sẽ nhận được thông báo cụ thể về chứng chỉ, cũng như các thông báo gia hạn, hết hạn… sau này.

Nhập email đăng ký Lets Encrypt

Sau đó là 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.

Chấp nhận điều khoản Lets Encrypt

Tiếp theo là khai báo domain cần cài chứng chỉ SSL, bạn cần khai báo cả phần không www và có www (ví dụ atcsmart.com www.atcsmart.com) – Rồi Enter.

Nhập domain để đăng ký SSL Lets Encrypt

Nếu mọi thứ OK, bạn sẽ nhận được thông báo này:

Đăng ký thành công SSL Lets Encrypt

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
 /etc/letsencrypt/live/atcsmart.com/fullchain.pem. Your cert will
 expire on 2020-02-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 [email protected].
 - 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

Phần màu đỏ là:

  • /etc/letsencrypt/live/atcsmart.com/ – thư mục chứa các file chứng chỉ
  • 2020-02-23 – ngày hết hạn (chúng ta sẽ cấu hình tự động gia hạn ở phần sau bài viết)

 

Nếu VPS có nhiều Websites và bạn muốn đăng ký SSL cho domain khác, không cần tải mã nguồn Let’s Encrypt về VPS nữa, 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:

# 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 2 – 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.

Nhưng trước hết, chúng ta cần Tạo file DH parameters 2048 bit cho VPS (chỉ tạo một lần trên mỗi VPS)

Tạo DH parameters cho VPS

DH ở đây là viết tắt của Diffie-Hellman, không phải tên của một người mà là tên nối của 2 nhà mật mã học lừng danh Whitfield Diffie và Martin Hellman, 2 cái tên đứng sau phương thức trao đổi khóa tiên phong trong mật mã học – Trao đổi khóa Martin-Hellman!

Đọc thông tin 3 link tham khảo trên bạn có thể hình dung DH parameters chính là file chứa các công cụ mã hóa vận hành chứng chỉ SSL.

Chúng ta sẽ tạo file DH parameters 2048 bit trên VPS, là 2048 bit vì nó đủ cho nhu cầu của chứng chỉ bảo mật SSL. Bạn có thể tạo 4096 bit.

Nếu Server bạn dùng Java6, thì cần tạo DH parameters 1024 bit, lớn hơn nó không hỗ trợ. Dù sao thì trong trường hợp của chúng ta (WordPress, PHP) thì chẳng cần quan tâm đến việc này làm gì.

Chạy 2 lệnh sau:

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

Tạo file DH Parameters trên VPS

Quá trình tạo DH parameters khá lâu, nhìn cứ như ma trận, bạn cứ kiên nhẫn đợi đến khi nó thông báo thành công nhé!

Quá trình tạo file DH parameters 2048 bit

Cấu hình SSL cho file cấu hình Nginx

Sau khi tạo xong DH paramenters 2048 bit, ta sẽ chỉnh sửa lại file cấu hình Nginx trên VPS, để nó chính thức sử dụng chứng chỉ SSL Let’s Encrypt vừa mới đăng ký.

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/atcsmart.com.conf

Ta sẽ truy cập vào mã nguồn VPS bằng WinSCP và sửa file này để cấu hình SSL. Đây là bước gây khó khăn nhất, rất may là bạn chỉ cần copy/ paste sau khi đọc qua các công đoạn cần chỉnh sửa code (nếu cần hiểu rõ hơn).

#1. Login vào mã nguồn VPS bằng WinSCP

Mở WinSCP, tạo New Site để lưu thông tin login vào VPS, tiện lợi cho việc login nhanh sau này:

Đăng nhập VPS bằng WindSCP

Lưu thông tin login VPS trên WinSCP

Sau khi đã lưu, ta login vào VPS:

Login vào mã nguồn VPS bằng WinSCP

Tương tự PuTTY, khi login vào VPS, sẽ có thông báo về điều khoản bảo mật này nọ, chọn Yes để tiếp tục:

Chấp nhận login qua WinSCP

Và chúng ta sẽ vào thư mục Home ngay trên VPS:

Thư mục Home trên VPS

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:

Vào thư mục etc trên VPS Linux

File cấu hình Nginx nằm trên đường dẫn này:

/etc/nginx/conf.d/atcsmart.com.conf

Em nó đây:

File cấu hình nginx cần chỉnh sửa để dùng SSL Lets Encrypt

#2. Chỉnh sửa file cấu hình nginx để dùng SSL Let’s Encrypt (làm thủ công)

Nhấp chuột phải vào file atcsmart.com.conf, chọn Edit để mở code:

Edit file cấu hình nginx

Code gốc của nó như thế này, tất cả các lệnh đều bỏ vào các block server {}, ta sẽ cấu hình lại thông tin trong các block này để dùng SSL Let’s Encrypt cho domain:

File cấu hình nginx gốc của VPS

Công việc của chúng ta bao gồm:

  1. Chỉnh sửa lại thông tin ở 2 block server {} đầu tiên của file gốc
  2. Thêm mới 1 block server {} ở trên cùng của file cấu hình

VHW sẽ trình bày cả 2 bước chi tiết cho bạn hiểu qui trình cấu hình, nhưng bạn không cần tự làm các bước này, tiếp theo VHW sẽ hướng dẫn bạn copy/paste từ file mẫu – 2 giây là xong.

#Chỉnh sửa block server {} đầu tiên của file gốc:

Từ block gốc:

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

Chỉnh thành:

server {
	listen 80;
	server_name atcsmart.com www.atcsmart.com;
	rewrite ^(.*) https://atcsmart.com$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.atcsmart.com sẽ chuyển về https://atcsmart.com

#Chỉnh sửa block server {} thứ 2 của file gốc:

Code gốc ở block này là:

server {
	listen 80 default_server;
		
	# access_log off;
	access_log /home/atcsmart.com/logs/access.log;
	# error_log off;
    	error_log /home/atcsmart.com/logs/error.log;
	
    	root /home/atcsmart.com/public_html;
	index index.php index.html index.htm;
    	server_name atcsmart.com;
.... còn tiếp

Ta sẽ đổi listen 80 default_server; thành  listen 443 ssl default_server;

Và sau đoạn server_name atcsmart.com; ta thêm các khai báo sau:

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

Và block server {} thứ 2 sẽ như thế này, phần bôi đỏ là code chỉnh sửa & thêm mới:

server {
	listen 443 ssl default_server;
		
	# access_log off;
	access_log /home/atcsmart.com/logs/access.log;
	# error_log off;
    	error_log /home/atcsmart.com/logs/error.log;
	
    	root /home/atcsmart.com/public_html;
	index index.php index.html index.htm;
    	server_name atcsmart.com;
	
	# SSL
	ssl_certificate /etc/letsencrypt/live/atcsmart.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/atcsmart.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;
	}
... còn tiếp

#Thêm mới một block server {} ở trên cùng của file gốc:

Ở trên cùng file cấu hình, thêm mới block này:

server {
	listen 443 ssl;
	server_name www.atcsmart.com;

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

#Nếu là domain chính, ta sẽ thêm một block nữa (thứ 4) để thiết lập giao thức https:// cho Admin Page của hocvps (trang theo dõi VPS, File Manager, phpMyAdmin…)

(Lưu ý nếu domain phụ thì không có block này do domain phụ không vào Admin Page của hocvps được)

server {
   #Port cua Admin Page ban da thiet lap, thay 2018 bang Port cua ban
	listen 2018 ssl;

 	access_log        off;
	log_not_found     off;
 	error_log /home/atcsmart.com/logs/nginx_error.log;

    	root /home/atcsmart.com/private_html;
	index index.php index.html index.htm;
    	server_name atcsmart.com;

        error_page 497 https://$server_name:$server_port$request_uri;

	ssl_certificate /etc/letsencrypt/live/atcsmart.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/atcsmart.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/atcsmart.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 /home/atcsmart.com/private_html$fastcgi_script_name;
    	}
	
	location ~ /\. {
		deny all;
	}
}


 

Xong rồi đấy, giờ ta sang phần hướng dẫn làm nhanh các công đoạn này.

#3. Chỉnh sửa file cấu hình nginx để dùng SSL Let’s Encrypt (làm tự động)

Thay vì bạn tự làm 3 block server {} ở #2, chúng ta có thể làm nhanh từ file cấu hình có sẵn, công việc của bạn chỉ là thay tên miền atcsmart.com thành tên miền của bạn, và chúng ta làm hàng loạt dễ dàng bằng Notepad++ Editor.

OK, bắt đầu từ file cấu hình mẫu bên dưới, mở nó lên bằng Notepad++:

  1. Nếu là domain chính của VPS (domain đầu tiên khai báo khi cài hocvps), ta sẽ cấu hình nó là default_server, nên file cấu hình bạn tải tương ứng ở đây (#domain chính)
  2. Nếu là domain phụ, ta bỏ thông số default_server, file cấu hình bạn tải ở đây (#domain phụ)

Bước 1 – Vào menu Search -> Replace và chọn replace toàn bộ atcsmart.com thành tên miền của bạn:

Replace file cấu hình nginx mẫu

Sau khi replace, toàn bộ file cấu hình nginx đã khai báo theo đúng tên miền của bạn:

Domain của bạn

 

Bước 2 – Bước này chỉ làm khi thiết lập SSL cho domain chính, mục đích để bạn vẫn vào được Admin Page của hocvps sau khi đổi sang https://

Nếu là domain phụ thì bạn bỏ qua bước này để qua thẳng bước 3.

Nếu là domain chính, bạn cần sửa lại Port Admin (do bạn chọn lúc cài đặt Hocvps) thì mới truy cập được Admin Page theo giao thức https:// (trang quản trị các thông số theo dõi VPS gồm File Manager, phpMyAdmin,…)

Trong file cấu hình ngninx ở trên thông tin Port Admin ở block Server {} cuối cùng (thứ 4, với domain phụ thì chỉ có 3 block server thôi) bạn cần thay port admin 2018 thành port của bạn. Cụ thể là dòng:

   #Port cua Admin Page ban da thiet lap, thay 2018 port admin cua ban
	listen 2018 ssl;

 

Bước 3 (Cuối cùng) – Bạn cần copy toàn bộ code ở Notepad++ và dán đè vào code file gốc trên WinSCP (/etc/nginx/conf.d/tenmiencuaban.com.conf) và lưu lại là xong:

Xong file cấu hình nginx

Rồi, công việc khó khăn nhất khi cài Let’s Encrypt SSL cho VPS đã hoàn thành chỉ trong vài giây copy/ paste & replace!

#4 Kiểm tra lại cấu hình nginx & enjoy https://

Sau khi sửa xong file cấu hình nginx (#2 hoặc #3) thì ta chạy lệnh kiểm tra xem cấu hình nginx có sai sót gì không:

nginx -t

Nếu mọi thứ ok, ta sẽ nhận thông báo thế này:

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

Rồi, giờ chạy lệnh khởi động lại nginx, và vào Website tận hưởng thành quả:

service nginx restart

Bạn có thẻ kiểm tra xem Website đã có chứng chỉ SSL Let’s Encrypt chưa bằng công cụ SSL Checker của SSL Shopper, kết quả xanh lè xanh lẹt dư lầy nà thành công (*_*).

Kiểm tra SSL cho Website

Bước 3 – Cấu hình VPS để tự động gia hạn Let’s Encrypt SSL

Mặc định chứng chỉ SSL Let’s Encrypt hiện nay chỉ có thời hạn 3 tháng, sau đó bạn phải gia hạn 3 tháng tiếp theo… và cứ thế.

Nếu dùng Shared Hosting hay Managed Hosting, các Control Panel của Hosting có tính năng tự gia hạn Let’s Encrypt SSl cho các domain trên hosting, không cần bạn tự làm.

Còn VPS, ta có thể chạy lệnh tự gia hạn trước khi chứng chỉ hết hạn. Nhưng cách tối ưu hơn là tạo CronJob để VPS tự động gia hạn ngay khi hết 3 tháng, chúng ta không cần làm gì cả.

#Kiểm tra thời hạn Lets Encrypt SSL

Bạn có thể kiểm tra thông tin chứng chỉ SSL Lets Encrypt và ngày hết hạn tại SSL Checker hoặc ngay trên thanh địa chỉ của trình duyệt:

Kiểm tra ngày hết hạn SSL Lets Encrypt

Có 2 cách gia hạn Let’s Encrypt SSL, thủ công hoặc tạo crontab để VPS tự check và gia hạn:

#Gia hạn SSL Let’s Encrypt (thủ công)

Chỉ cần chạy lệnh này là xong:

/opt/letsencrypt/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"

Chạy lệnh gia hạn SSL Lets Encrypt

Gia hạn thành công Lets Encrypt SSL

#Gia hạn SSL Let’s Encrypt (tự động)

Ta sẽ dùng tính năng Cron (tác vụ tự động) trên Linux để SSL Let’s Encrypt tự động check và gia hạn, cụ thể là tạo Crontab (Cron Tables – bản tác vụ tự động – thực hiện theo chu kỳ được chỉ định).

Đầu tiên mở file cấu hình crontab bằng vi editor (editor mặc định của Centos, bạn có thể dùng nano thay cho vi nếu có cài nano editor):

EDITOR=vi crontab -e

Tao Crontab cho VPS

Trong cửa sổ soạn thảo hiện ra, bạn gõ phím i trên bàn phím để chuyển qua chế độ soạn thảo (insert), và copy, dán đoạn này vào (right-click để dán trong PuTTY – bạn còn nhớ chứ):

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

Gõ lệnh Crontab

Sau đó, gõ phím ESC trên bàn phím để đổi thoát độ soạn thảo (insert), rồi gõ :wq! rồi Enter để lưu file trước khi thoát!

Lưu file và thoát khỏi vi Editor VPS

Và bạn nhận thông báo crontab đã tạo thành công!

crontab: installing new crontab

Tạo Crontab thành công

Từ giờ trở đi không cần chạy lệnh gia hạn thủ công nữa – Quá tuyệt!

#Gia hạn SSL Let’s Encrypt khi dùng CloudFlare CDN

Lưu ý nếu bạn dùng CloudFlare và có bật dịch vụ CDN (đám mây vàng) thì quá trình gia hạn (cả thủ công lẫn auto) có thể bị lỗi.

Nguyên do khi bật CDN, tên miền không trỏ trực tiếp tới IP của VPS nữa mà trỏ qua IP của CloudFlare CDN, khi đó quá trình xác thực chứng chỉ SSL Let’s Encrypt có thể bị lỗi.

Lúc này, bạn cần tạm tắt CloudFlare CDN, rồi chạy lệnh gia hạn Let’s Encrypt thủ công, sau đó hãy bật lại CDN.

Tắt CDN CloudFlare

Login vào VPS bằng PuTTY, login root user, copy rồi paste (right-click) dòng lệnh gia hạn:

/opt/letsencrypt/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"

Chạy lệnh gia hạn SSL Lets Encrypt

Gia hạn thành công Lets Encrypt SSL

Bước 4 – (Tùy chọn) Update cấu hình https:// cho WordPress

Nếu Website cài SSL Let’s Encrypt đang chạy WordPress, thì để toàn bộ các link giao thức cũ (http://) tự động redirect sang giao thức bảo mật với SSL (https://).

Chúng ta nên cài plugin số 1 cho nhiệm vụ này là Really Simple SSL, chỉ cần cài và kích hoạt là nó làm mọi thứ cho chúng ta rồi.

Cài Really Simple SSL:

Cài Really Simple SSL

Sau đó khởi chạy để nó tự động làm mọi thứ:

Thường nếu trước đó bạn dùng http://, thì sau khi khởi chạy Really Simple SSL, bạn sẽ bị logout và cần login lại qua gia thức https://

Từ giờ trở đi mọi link http:// cũ sẽ tự động redirect về https://

Và nếu bạn đã có nhiều nội dung trên Website, để fix toàn bộ các links http:// của hình ảnh, link file,… thì có thể cài thêm plugin miễn phí SSL Insecure Content Fix, chỉ cài và kích hoạt là xong, không cần cấu hình gì cả:

Fix lỗi SSL insecure

 

Dùng Let’s Encrypt SSL chung với CloudFlare CDN

CloudFlare là dịch vụ DNS & CDN miễn phí số 1 thế giới hiện nay.

Với dịch vụ DNS, rõ ràng CloudFlare là lựa chọn không cần bàn cãi nhờ hệ thống máy chủ phân giải tên miền mạnh mẽ, phân bổ khắp thế giới.

Riêng dịch vụ CDN free của CloudFlare, rất hữu ích cho các Website dùng Hosting yếu, hoặc máy chủ ở quá xa người dùng. CDN CloudFlare giúp tăng tốc rất đáng kể trong các trường hợp như vậy. Nhưng:
CDN miễn phí của CloudFlare – đúng nghĩa miễn phí, vì nó thực sự không ổn định, down-time nhiều. Do đó nếu bạn dùng hosting mạnh – vps cao cấp thì không nên sử dụng hàng free của CloudFlare, vì down-time thường xuyên sẽ khiến Website bị tụt hạng rất nhanh, chưa kể nó ảnh hưởng nặng đến trải nghiệm người dùng.

Tham khảo:

Hướng dẫn sử dụng CloudFlare DNS & CDN

Có 2 giải pháp để cài SSL khi dùng CloudFlare là:

#Dùng Flexible SSL miễn phí của CloudFlare

Về SSL, CloudFlare có chứng chỉ SSL miễn phí, gọi là Flexible SSL, đây là dạng chứng chỉ SSL trung gian, dùng cho nhiều domain trên một cụm máy chủ CDN của CloudFlare.

Chứng chỉ này không cần đăng ký – xác thực gì cả, nên nó không được đánh giá cao, bị một số trình duyệt cảnh báo bảo mật.

Và muốn dùng Flexible SSL, bạn phải bật CloudFlare CDN (đám mây vàng), sau đó chỉ cần kích hoạt trong mục Crypto (hiện đã đổi tên thành SSL/TLS) là xong:

VHW không khuyên dùng chứng chỉ này. Bạn nên chịu khó đăng ký và dùng SSL Let’s Encrypt và cấu hình phù hợp như hướng dẫn ngay bên dưới:

#Dùng SSL Let’s Encrypt với CloudFlare CDN & DNS

Sau khi bạn cài Let’s Encrypt SSL cho VPS, nếu bạn dùng CloudFlare cho Website, (cả khi bật hay tắt CDN) thì bạn cần vào mục SST/ TLS, chọn lại thành Full (Strict):

Dùng Lets Encrypt SSL với CloudFlare

Kết luận!

Chứng chỉ SSL là thứ bắt buột phải có cho mọi Website hiện nay, nó không chỉ mang lại uy tín , an toàn cho dữ liệu người dùng khi tương tác trên Website, mà còn tránh được nguy cơ trang web của bạn bị các trình duyệt chặn truy cập.

Việc bật Let’s Encrypt SSL trên các dịch vụ Hosting hiện nay quá dễ dàng, còn với VPS, bài viết này hi vọng mang đến cho bạn những tiện lợi để tự tin cài đặt và sử dụng Lets Encrypt SSL & trải nghiệm sức mạnh vượt trội của VPS.

Tham khảo:

Hướng dẫn bật SSL Let’s Encrypt trên Hosting

 

Đánh giá bài viết