Cài đặt SSL Let’s Encrypt Miễn Phí Trên VPS

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

Hocvps Script cài đặt rất tiện và dễ dàng. Nhưng mà vẫn đang phải cài SSL Let’s Encrypt một cách thủ công cho từng website. Nên mình tổng hợp ngắn gọn nhất nhé.

1. Cài đặt chứng chỉ Let’s Encrypt SSL

Clone mã nguồn Let’s Encrypt về thư mục /opt/letsencrypt. Bước này giống nhau với cả CentOs 6 và 7.

# Install Git
yum -y install git

# Clone Let's Encrypt repository
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Cập nhật mã nguồn Let's Encrypt

Thỉnh thoảng bạn nên cập nhật mã nguồn Let’s Encrypt từ Github để có được tính năng mới nhất. Hoặc đôi khi chứng chỉ Lets Encrypt không tự động gia hạn mặc dù đã kích hoạt crontab

cd /opt/letsencrypt && git pull

Nếu gặp thông báo lỗi như bên dưới:

error: Your local changes to 'letsencrypt-auto' would be overwritten by merge. Aborting.
Please, commit your changes or stash them before you can merge.

Bạn sẽ cần sử dụng dòng lệnh này:

cd /opt/letsencrypt && git reset --hard && git pull

2. Cài đặt chứng chỉ Let’s Encrypt cho website

Tắt nginx và tiến hành cài đặt bằng 2 lệnh dưới:

# Stop Nginx
service nginx stop

# Issue SSL Let's Encrypt
/opt/letsencrypt/certbot-auto certonly --standalone

Sau đó, các bạn tiến hành nhập email của mình, chọn Y/A để đồng ý điều khoản.

Sau đó, bạn nhập tên miền cần cài đặt. Nếu không gặp vấn đề gì bạn sẽ gặp thông báo như bên dưới.

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

Nếu bạn muốn cài đặt cho nhiều website. Bạn tiếp tục chạy 2 lệnh trên.

3. Cấu hình Nginx

Bài viết này mình viết theo hướng dẫn của hocvps nhưng ngắn gọn hơn, do đó mình sử dụng ví dụ và mô tả của hocvps để tiết kiệm thời gian.

Tạo file DH parameters 2048 bit (tạo một lần duy nhất trên VPS). Nếu như cài lần thứ 2, cho tên miền thứ 2 sẽ không cần chạy lệnh này nữa.

mkdir /etc/nginx/ssl/

Chạy lệnh dưới, trước khi cấu hình Nginx thì cần chạy lệnh này.

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

Chỉnh sửa cấu hình domain bằng lệnh: (bạn nhớ thay hocvps.com = tên miền của bạn, ví dụ mình là isharevn.net)

nano /etc/nginx/conf.d/hocvps.com.conf

Redirect toàn bộ www http sang https

Ngay khi mở file ra, các bạn sẽ nhìn thấy block này đầu tiên, các bạn tiến hành sửa như chỗ bôi đỏ.

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

Redirect toàn bộ www https sang https

Các bạn thêm mới block dưới đây vào trên cùng, chú ý thay tên miền mình đã bôi đỏ nhé. Các bạn có thể copy toàn bộ nội dung ra file notepad sau đó tổ hợp phím Ctrl + H rồi thay thế hocvps.com bằng tên miền của bạn.

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

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

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

Các bạn tìm đến block thứ 3 (block đầu tiên vừa thêm vào, và block đầu tiên trước khi thêm đã thành block thứ 2, block thứ 2 trước khi thêm chính là block thứ 3 mà mình nói tới):

Đổi lại: listen 80 default_server; thành listen 443 ssl default_server;

Các bạn chú ý, chỉ cần đổi 80 sang 443 ssl như vậy là được rồi nhé. Cái này khi bạn cài tên miền thứ 2, thì sẽ không có default_server.

Sau cái dòng server_name hocvps.com; (ngay dưới dòng vừa sửa vài dòng thôi) thì các bạn thêm đoạn này vào.

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

Các bạn chú ý thay tên miền nhé. Tốt nhất cứ copy vào file notepad sau đó tiền hành thay thế toàn bộ.

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

(Mình thì tiện mình làm, chứ mình nghĩ không cần, vì nếu như các bạn không redirect từ http sang https thì quản lý vẫn được và không ảnh hưởng gì cả.

Các bạn tìm kiếm đến block có port lúc các bạn cài Hocvps Script tương tự như bên dưới, các bạn thêm toàn bộ phần bôi đỏ nhé. Đặc biệt, vẫn chú ý phải thay tên miền hocvps.com thành tên miền của bạn. Tốt nhất là copy ra file notepad rồi Ctrl + H thôi.

server {
	listen 2018 ssl;

 	access_log        off;
	log_not_found     off;
 	error_log         off;

    	root /home/hocvps.com/private_html;
	index index.php index.html index.htm;
    	server_name hocvps.com;
 	
        error_page  497 https://$server_name:$server_port$request_uri;

	ssl_certificate /etc/letsencrypt/live/hocvps.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/hocvps.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/hocvps.com/private_html/hocvps/.htpasswd;
	
	...

File cấu hình Nginx cuối cùng sẽ tương tự như sau:

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

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

server {
	listen 443 ssl default_server;
		
	# access_log off;
	access_log /home/hocvps.com/logs/access.log;
	# error_log off;
    	error_log /home/hocvps.com/logs/error.log;
	
    	root /home/hocvps.com/public_html;
	index index.php index.html index.htm;
    	server_name hocvps.com;
	
	# SSL
	ssl_certificate /etc/letsencrypt/live/hocvps.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/hocvps.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/hocvps.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 /home/hocvps.com/public_html$fastcgi_script_name;
    	}
	location /nginx_status {
  		stub_status on;
  		access_log   off;
                allow 127.0.0.1;
                deny all;
	}
	location /php_status {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME  /home/hocvps.com/public_html$fastcgi_script_name;
		include /etc/nginx/fastcgi_params;
                allow 127.0.0.1;
                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 2018 ssl;

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

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

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

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

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

nginx -t

Nếu như phản hồi lại như này là ok:

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

Sau đó bạn khởi động lại Nginx mà mình vừa stop trước đó:

 

service nginx restart

Giờ truy cập vào website bạn sẽ hưởng thành quả:

4. Gia hạn và tự động gia hạn SSL Let’s Encrypt

Chứng chỉ SSL Let’s Encrypt sẽ hết hạn sau 90 ngày từ ngày cài đặt, do đó bạn cần tiến hành gia hạn trước thời gian đó.

Bạn có thể chạy gia hạn thủ công bằng lệnh:

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

Để gia hạn tự động, bạn cần cài đặt trong Crontab:

Mở file crontab:

EDITOR=nano crontab -e

Copy và paste đọna code dưới đây và tiến hành lưu lại:

30 2 * * * /opt/letsencrypt/certbot-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 nhận được thông báo sau là thành công

crontab: installing new crontab

Vậy là xong, bạn có thể yên tâm sử dụng Let’s Encrypt rồi đấy.

5. Xóa chứng chỉ Let’s Encrypt

Khi bạn không sử dụng Let’s Encrypt nữa, chuyển qua sử dụng của nhà cung cấp khác và muốn xóa chứng chỉ Let’s Encrypt đã cài, hãy sử dụng lệnh bên dưới:

/opt/letsencrypt/certbot-auto delete

Đây là bài viết mình viết theo hocvps với nội dung đơn giản dễ hơn theo cách mình đang làm. Vì mới đầu mình cài đặt cũng khá vất vả vì hơi rối.

Exit mobile version