Trong bài này, topweb.store 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ướ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
- 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
- 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é!
- 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:
- Bước 6: Cấu hình Nginx
- Note: Một file config đầy đủ thông thường 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ạn có thể cài LAMP cho VPS gồm: Apache, Mysql hoặc MariaDB và PHP
- Để đơn giản bạn nên cài đặt VPS thông qua các script đã được viết sẵn. Bạn có thể tham khảo hướng dẫn tại đây
- Tham khảo: https://topweb.store/huong-dan-cai-vps-server-linux-bang-mot-so-script-thong-dung-nhat-hien-nay
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!