Bạn đang chạy web trên VPS sử dụng HocVPS Script để tạo server? Giờ bạn muốn cài đặt SSL cho web chạy trên VPS đó? Vậy hãy làm theo hướng dẫn này để cài đặt chứng chỉ SSL của Let’s Encrypt hoàn toàn miễn phí và được tự động gia hạn SSL.
Let’s Encrypt là nhà cung cấp chứng chỉ số SSL (Certificate Authority) hoàn toàn miễn phí, đã và đang được sử dụng trên rất nhiều website. Hiện tại hầu hết các shared hosting như Hawkhost, AZDIGI, Stablehost,…đều đã tích hợp sẵn Let’s Encrypt trong Cpanel. Và trên blog mình cũng có bài hướng dẫn cài đặt SSL trên Cpanel bạn có thể tham khảo.
Trong bài viết này, Nguyễn Hùng sẽ hướng dẫn bạn cách cài đặt chứng chỉ Let’s Encrypt SSL cho web trên VPS dùng HocVPS Script giúp bạn có thể tự cài đặt SSL cho tất cả các web đang chạy trên server. Nào! Cùng bắt đầu làm theo các bước bên dưới.
Cài đặt chứng chỉ Let’s Encrypt SSL cho web đầu tiên trên VPS
Vì là cài cho web đầu tiên nên bạn phải clone mã nguồn của Let’s Encrypt về thư mục /opt/letsencrypt
bằng cách chạy 2 lệnh sau. (CentOS 6 hay 7 đều thực hiện giống nhau).
yum -y install git git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Tiếp theo, để cài đặt Let’s Encrypt mình sẽ sử dụng option --standalone
. Bạn chạy lần lượt 3 lệnh sau:
service nginx stop cd /opt/letsencrypt ./letsencrypt-auto certonly --standalone
Bạn chờ cho Let’s Encrypt cài đặt đầy đủ các công cụ cần thiết. Sau đó nó yêu cầu bạn nhập vào email và ấn Enter để tiếp tục.
Nhập vào a
rồi ấn Enter để chấp nhập các điều khoản.
Tiếp theo nó sẽ hỏi bạn có đồng ý chia sẻ địa chỉ email với đối tác sáng lập Let’s Encrypt để họ gửi cho bạn những thông tin gì đó. Bạn có thể chọn y
(Yes) hoặc n
(No). Ở đây mình chọn y
và ấn Enter.
Sau đó bạn nhập vào tên miền cần cài đặt SSL. Bạn nhập cả 2 phiên bản www và non-www của domain đó vào rồi ấn Enter.
Nếu không có lỗi gì xảy ra bạn sẽ nhận được thông báo như sau:
Lưu ý các thông tin tô sáng:
- /etc/letsencrypt/live/nguyenhung.net/: là đường dẫn thư mục chứa các file chứng chỉ.
- 2018-07-03: ngày hết hạn chứng chỉ (90 ngày từ ngày cài đặt).
Đó là các bước cài cho web đầu tiên trên VPS, từ các web sau để cài đặt SSL bạn chỉ cần làm như sau.
Cài đặt chứng chỉ Let’s Encrypt SSL cho web khác trên VPS
Đối với các web khác trên VPS nếu bạn muốn cài SSL thì chỉ cần chạy 3 lệnh bên dưới rồi nhập domain vào tương tự như ở trên.
service nginx stop cd /opt/letsencrypt ./letsencrypt-auto certonly --standalone
Cấu hình SSL trong file Nginx
Sau khi cài đặt các file chứng chỉ cho domain xong, việc tiếp theo là chỉnh sửa lại file cấu hình Nginx. Ví dụ tên miền mình vừa cài đặt SSL là nguyenhung.net
thì file cấu hình nginx là /etc/nginx/conf.d/nguyenhung.net.conf
Khi làm trên VPS của bạn thì nhớ thay dòng nguyenhung.net
thành tên miền của bạn nhé.
Tạo file DH parameters 2048 bit (tạo 1 lần duy nhất trên VPS)
mkdir /etc/nginx/ssl/ openssl dhparam 2048 -out /etc/nginx/ssl/dhparam.pem
Chỉnh sửa cấu hình nginx bằng Nano Editor
nano /etc/nginx/conf.d/nguyenhung.net.conf
Cấu hình SSL xử lý các request
Trong block server { ... }
thứ 2 bạn sửa lại như sau:
+) Chuyển listen 80 default_server;
thành listen 443 ssl default_server;
Lưu ý: Với domain không phải domain chính bạn chuyển listen 80 default_server;
thành listen 443 ssl;
+) Sau dòng server_name nguyenhung.net;
bạn thêm vào đoạn cấu hình SSL như sau:
# SSL ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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;
Redirect toàn bộ www và non-www từ http sang https
Trong block server { ... }
ở trên cùng, bạn sửa lại như sau:
+) Chuyển server_name www.nguyenhung.net;
thành server_name nguyenhung.net www.nguyenhung.net;
+) Chuyển rewrite ^(.*) http://nguyenhung.net$1 permanent;
thành rewrite ^(.*) https://nguyenhung.net$1 permanent;
Kết quả toàn bộ block server { ... }
ở trên cùng sẽ như sau:
server { listen 80; server_name nguyenhung.net www.nguyenhung.net; rewrite ^(.*) https://nguyenhung.net$1 permanent; }
Block này có tác dụng giúp tự động chuyển https://nguyenhung.net và http://www.nguyenhung.net sang https://nguyenhung.net
Redirect toàn bộ www https sang https
Thêm mới block server { ... }
ở trên cùng
server { listen 443 ssl; server_name www.nguyenhung.net; # SSL ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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://nguyenhung.net$1 permanent; }
Block này có tác dụng giúp tự động chuyển https://www.nguyenhung.net sang https://nguyenhung.net
Cấu hình SSL với port quản lý HocVPS Script Admin
Đây là bước tùy chọn. Sau khi cài SSL cho domain chính bạn sẽ không truy cập được vào các công cụ HocVPS Script Admin thông qua domain ở địa chỉ (https://domain.com:2525) mà bạn chỉ có thể truy cập thông qua địa chỉ IP (https://dia-chi-ip:2525). Nếu bạn muốn dùng domain để truy cập các công cụ HocVPS Script Admin thì bạn thao tác theo các bước bên dưới.
Lưu ý: Bước này chỉ thiết lập đối với domain chính dùng để cài HocVPS Script – Domain phụ KHÔNG được thiết lập.
Giả sử khi cài HocVPS Script mình để port là 2525
Bạn hãy tìm block server { ... }
cuối cùng có dòng listen 2525;
server { listen 2525 ssl; access_log off; log_not_found off; error_log /home/nguyenhung.net/logs/nginx_error.log; root /home/nguyenhung.net/private_html; index index.php index.html index.htm; server_name nguyenhung.net; error_page 497 https://$server_name:2525$request_uri; ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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/nguyenhung.net/private_html/hocvps/.htpasswd;
Bây giờ thì bạn đã có thể truy cập HocVPS Script Admin bằng https://domain.com:2525
Cấu hình file Nginx cuối cùng của domain chính như sau:
server { listen 443 ssl; server_name www.nguyenhung.net; # SSL ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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://nguyenhung.net$1 permanent; } server { listen 80; server_name nguyenhung.net www.nguyenhung.net; rewrite ^(.*) https://nguyenhung.net$1 permanent; } server { listen 443 ssl default_server; # access_log off; access_log /home/nguyenhung.net/logs/access.log; # error_log off; error_log /home/nguyenhung.net/logs/error.log; root /home/nguyenhung.net/public_html; index index.php index.html index.htm; server_name nguyenhung.net; # SSL ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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/nguyenhung.net/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 $document_root$fastcgi_script_name; } location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; allow 45.77.94.237; deny all; } location /php_status { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; allow 127.0.0.1; allow 45.77.94.237; 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 2525 ssl; access_log off; log_not_found off; error_log /home/nguyenhung.net/logs/nginx_error.log; root /home/nguyenhung.net/private_html; index index.php index.html index.htm; server_name nguyenhung.net; error_page 497 https://$server_name:2525$request_uri; ssl_certificate /etc/letsencrypt/live/nguyenhung.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nguyenhung.net/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/nguyenhung.net/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 $document_root$fastcgi_script_name; } location ~ /\. { deny all; } }
Kiểm tra lại cấu hình file Nginx
nginx -t
Nếu nhận được thông báo 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
Khởi động lại Nginx
service nginx restart
Bây giờ bạn truy cập vào domain và xem thành quả
Lưu ý: Bạn phải chuyển toàn bộ link image, js, css từ http:// sang https:// thì tất cả các link trên web mới có biểu tượng màu xanh. Bạn có thể xem hướng dẫn cài đặt chuyển từ HTTP sang HTTPS cho web WordPress trong phần cuối bài viết này.
Cài đặt tự động gia hạn Let’s Encrypt SSL
Như ở trên mình cũng đã nói, chứng chỉ Let’s Encrypt SSL sẽ hết hạn sau 90 ngày kể từ ngày cài đặt. Vì vậy chúng ta sẽ sử dụng crontab để thiết lập tự động gia hạn chứng chỉ SSL bằng cách làm như sau:
Mở file cấu hình crontab
EDITOR=nano crontab -e
Dán đoạn code sau vào cửa sổ ZOC Terminal
15 1 * * * /opt/letsencrypt/letsencrypt-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 thấy thông báo như sau là OK.
crontab: installing new crontab
Trong đoạn code trên mình thiết lập crontab chạy lệnh gia hạn Let’s Encrypt SSL vào lúc 1h15 hàng ngày và kiểm tra xem nếu hết hạn thì sẽ tự động gia hạn.
Đó là tất cả những gì mình hướng dẫn để bạn cài SSL miễn phí của Let’s Encrypt trên VPS. Nếu bạn có dự định chuyển sang dùng SSL trả phí thì hãy tham khảo bài viết hướng dẫn mua SSL và cài đặt SSL trả phí với giá rẻ nhất mình đã chia sẻ trên blog Nguyễn Hùng nhé.
Lời kết
Vậy là mình đã hướng dẫn bạn cài đặt chứng chỉ Let’s Encrypt SSL cho web chạy trên VPS sử dụng HocVPS Script tạo server. Với hướng dẫn này bạn sẽ được sử dụng SSL miễn phí từ Let’s Encrypt trọn đời. Còn chờ đợi gì nữa mà không cài đặt SSL cho web của bạn ngay đi. Chúc bạn thành công!
bên mình có nhận cài ssl và config luôn không ạ
Bạn nhắn thông tin qua email [email protected] cho mình nhé.
Kiểm tra lại thấy thêm hàng trên nữa. bị gì và khắc phục thế nào đây A Nguyễn Hùng
nginx -t
nginx: [warn] conflicting server name “www.webtoi.net” on 0.0.0.0:443, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Bạn mở file nginx ra kiểm tra lại nó đang bị xung đột cổng gì đó rồi.
Bác ơi, bác có Video hướng dẫn ko ạ, em xem những ko hiểu gì thêm vào đâu híc, e mới tập tành bác ạ
Hiện tại mình chưa làm video hướng dẫn bạn à. Bạn có thể thực hành theo từng bước là đc. Sau mình sẽ cố gắng làm 1 video hướng dẫn chi tiết hơn. Ngoài ra, nếu bạn mới dùng VPS thì có thể dùng thử VPSSIM, nó hỗ trợ nhiều hơn HocVPS đó.
thanks bác ạ, hóng video của bác hì
phí gia hạn cho Let’s Encrypt SSL bao nhiêu 1 năm vậy bác nhỉ. và có sử dụng cho nhiều domain hay chỉ dùng cho 1 domain thôi bác.
Let’s Encrypt SSL này là hoàn toàn miễn phí bạn nhé. Tuy nhiên, nó có hạn dùng trong 90 ngày nên bạn cần cầu hình như trong bài để nó tự động gia hạn thì bạn có thể dùng được mãi.
Bạn có thể cài cho bao nhiêu domain cũng đc nhé.
Hi Hùng,
Mình nhờ người quen cài SSL trên Vultr, dùng VPSSIM, đã hoạt động tốt.
Bây giờ mình muốn cài thêm domain mới, bạn có thể hướng dẫn giùm được k. Nếu được, chỉ mình cách đơn giản nhất nhé (mình k phải dân IT). Tks bạn!
(nếu dài quá thì gửi mail mình nhé)
Chào bạn,
Việc cài đặt SSL trên VPSSIM dễ hơn trên HocVPS rất nhiều bởi trong VPSSIM có menu thực hiện việc đó rồi. Bạn có thể đọc bài hướng dẫn này để biết cách cài nhé.
cái này còn có thể cài không thế pro? mình cài trên apache web panel thì thế nào?
Hướng dẫn này làm trên VPS chạy NGINX bạn nhé. Bạn dùng Apache thì thử tìm trên Google xem sao nhé. Còn nếu bạn dùng hosting thì mình có bài hướng dẫn rồi, bạn xem ở đây nha.
Mình là newbie mới cài cái web trên vps vultr, nhưng không biết cài ssl của nó như thế nào cả! bạn có thể hướng dẫn không? Tìm trên mạng không thấy hướng dẫn, và gõ mấy câu lệnh đó vô chỗ nào vậy? Xin cảm ơn
Bạn cài đc web trên VPS thì chắc bạn phải cài đc hệ thống để chạy web trên VPS hay bạn nhờ ai cài hộ? Mình cần biết bạn đang dùng script nào để cài hoặc VPS đang cài control panel nào để biết hướng dẫn nhé.
Anh Hùng có thể cho em hỏi là em dùng vps vultr nhưng khi cài đặt đều bị lỗi. Dù đã reinstall trên vps để bắt đầu cài lại từ đầu rồi nhưng vẫn bị lỗi ạ.
Bạn bị lỗi khi cài SSL hả. Việc này có thể do bạn cấu hình trên HocVPS thôi, mình cũng từng cài trên VPS Vultr vẫn OK mà