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
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 Nếu gặp thông báo lỗi như bên dưới: Bạn sẽ cần sử dụng dòng lệnh này:
Cập nhật mã nguồn Let's Encrypt
cd /opt/letsencrypt && git pull
error: Your local changes to 'letsencrypt-auto' would be overwritten by merge. Aborting.
Please, commit your changes or stash them before you can merge.
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.