Hướng dẫn cài đặt chứng chỉ SSL trên server Linux

Trong bài này, mình sẽ hướng dẫn các bạn cài đặt chứng chỉ Let’s Encrypt SSL trên server Linux như sau.

Bước 1 : Trỏ domain về IP server (Nếu bạn đã thực hiện trỏ domain về server trước đó ,hãy bỏ qua bước này)

  • Bạn mua domain ở nhà cung cấp nào thì vào quản lý domain để làm thao tác này.
  • Tạo 2 record loại A là @ và www và trỏ domain này về IP server.

Bước 2 : Cài đặt VPS Linux (Nếu bạn đã cài server trước đó, hãy bỏ qua bước này)

Bước 3: Clone mã nguồn của Let’s Encrypt về thư mục /opt/letsencrypt: Vào Terminal Console chạy các lệnh sau

# Install Git

yum -y install git

# Clone Let’s Encrypt repository

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

Bước 4: Phát hành chứng chỉ SSL Let’s Encrypt cho domain: Vào Terminal Console chạy các lệnh sau

# Stop Nginx

service nginx stop

# Issue SSL Let’s Encrypt

/opt/letsencrypt/certbot-auto certonly --standalone
  • Chọn y rồi chờ một lúc để Let’s Encrypt cài đặt những công cụ cần thiết.
  • Sau đó bạn hãy nhập địa chỉ email, rồi nhấn phím Enter.
  • Chấp nhận quy định của Let’s Encrypt, rồi nhấn tiếp Enter.
  • Tiếp theo bạn nhập tên miền sẽ sử dụng chứng chỉ SSL, rồi nhấn Enter.
  • Nếu trong khi chạy lệnh trên nếu xuất hiện lỗi như hình sau


Trong trường hợp này thì bạn thực hiện các câu lệnh sau

yum install epel-release
yum install certbot-nginx
certbot --nginx -d ten_mien_cua_ban

Chú ý: Các lệnh trong bước 4 này còn được dùng trong trường hợp bạn cần bổ sung thêm domain/subdomain muốn cài đặt Let’s Encrypt lên server nhé!

# Stop Nginx
service nginx stop
# Issue SSL Let's Encrypt
certbot certonly --standalone

Bước 5: Tạo file DH parameters 2048 bit (tạo một lần duy nhất trên VPS). Mở Terminal Console chạy các lệnh sau:

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

Bước 6: Cấu hình Nginx

Sau khi có các file chứng chỉ, chúng ta sẽ chỉnh lại file cấu hình Nginx, file cấu hình sẽ có đường dẫn là /etc/nginx/conf.d/

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

Trong block server { … } thứ 2 điều chỉnh như sau:

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

Sau dòng server_name ten_mien_cua_ban; thêm đoạn cấu hình SSL:

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

2. Redirect toàn bộ www https sang https

Trong block server { … } ở trên cùng

server {
listen 80;
server_name ten_mien_cua_ban;

rewrite ^(.*) https://ten_mien_cua_ban$1 permanent;
}

Note: Một file config đầy đủ thông thường như sau:

server {
listen 80;
server_name www.ten_mien_cua_ban ten_mien_cua_ban;
rewrite ^(.*) https://ten_mien_cua_ban$1 permanent;
}
server {
listen 443 ssl http2;
# access_log off;
access_log /home/ten_mien_cua_ban/logs/access.log;
# error_log off;
error_log /home/ten_mien_cua_ban/logs/error.log;

root /home/ten_mien_cua_ban/public_html;
index index.php index.html index.htm;
server_name ten_mien_cua_ban;

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

# Custom configuration
include /home/ten_mien_cua_ban/public_html/*.conf;

location / {
try_files $uri $uri/ /index.php?$args;
}

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 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 32k;
fastcgi_buffers 8 16k;
fastcgi_busy_buffers_size 32k;
fastcgi_temp_file_write_size 32k;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME /home/ten_mien_cua_ban/public_html$fastcgi_script_name;
}

# 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;
}
}

Kiểm tra lại cấu hình Nginx bằng lệnh:

nginx -t

Phản hồi 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

Bạn khởi động lại Nginx bằng lệnh:

service nginx restart

Giờ truy cập vào domain của bạn để tận hưởng thành quả thôi.
Chúc các bạn thành công!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *