Nếu server của bạn đang dùng HocVPS Script, hãy làm theo từng bước hướng dẫn này để cài đặt chứng chỉ SSL Let’s Encrypt miễn phí và được tự động gia hạn.

Lets Encrypt

Let’s Encrypt là một nhà cung cấp chứng chỉ số SSL (Certificate Authority) hoàn toàn miễn phí, được nhiều cá nhân và tổ chức tin dùng và đặc biệt không giới hạn.

Trong bài viết này, mình sẽ hướng dẫn các bạn từng bước cài đặt chứng chỉ Let’s Encrypt trên server cài HocVPS Script (LEMP Server, CentOS 6 và 7). Nếu dùng shared hosting như Hawk Host hoặc StableHost, DreamHost, SiteGround thì mọi chuyện còn đơn giản hơn nhiều vì Let’s Encrypt đã được tích hợp sẵn trong cPanel, chỉ cần vài click là cài đặt thành công. Mời bạn tham khảo hướng dẫn cài đặt Let’s Encrypt trong cPanel.

Let’s Encrypt là chứng chỉ SSL loại Domain Validation tức là sau khi cài bạn sẽ có thanh ổ khoá màu xanh trên trình duyệt. Ngoài Let’s Encrypt còn có PositiveSSL của Comodo và Standard SSL DV của GoDaddy. cũng được rất nhiều người sử dụng.

Nếu cài xong mà thanh địa chỉ chưa hiện HTTPS màu xanh, hãy tham khảo bài Hướng dẫn cài đặt SSL “xanh hoàn hảo”

Nếu không nắm vững kiến thức kỹ thuật, hãy liên hệ sử dụng Dịch vụ Cài đặt SSL từ Học VPS.

Surf safely

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

1.1/ Cài đặt certbot

yum -y install certbot

1.2/ Phát hành chứng chỉ SSL Let’s Encrypt cho domain

Để phát hành chứng chỉ SSL Let’s Encrypt cho domain có rất nhiều cách, mình sẽ sử dụng option --standalone

Nếu đang dùng CloudFlare, bạn hãy tắt chức năng ẩn IP đi bằng cách click chuyển đám mây từ Vàng sang Xám thì mới cài đặt được Let’s Encrypt.
# Stop Nginx
service nginx stop

# Issue SSL Let's Encrypt
certbot certonly --standalone

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 bằng cách nhập a, 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. Bước này bạn chỉ nhập phiên bản non-www và www của 1 domain hoặc subdomain. Khi muốn thêm tên miền/subdomain khác bạn hãy xem hướng dẫn bên dưới.

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

Lưu ý các thông tin mình bôi đỏ:

  1. /etc/letsencrypt/live/hocvps.com/: thư mục chứa các file chứng chỉ
  2. 2016-08-23: ngày hết hạn của chứng chỉ (90 ngày từ ngày cài)

Cài đặt chứng chỉ SSL Let’s Encrypt cho nhiều website

Nếu cần bổ sung thêm domain/subdomain muốn cài đặt Let’s Encrypt, bạn chỉ cần chạy lại lệnh bên dưới rồi nhập domain vào:

# Stop Nginx
service nginx stop

# Install Let's Encrypt
certbot certonly --standalone

Lúc này domain mới sẽ có thêm một thư mục riêng chứa file chứng chỉ cần thiết.

2/ 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. Ví dụ tên miền của mình là hocvps.com thì file cấu hình sẽ có đường dẫn là /etc/nginx/conf.d/hocvps.com.conf

Khi làm bạn nhớ thay tương ứng hocvps.com bằng domain của bạn nhé.
Lưu ý: Chỉ cấu hình Nginx khi bạn đã phát hành thành công chứng chỉ SSL.

Tạo file DH parameters 2048 bit (tạo một 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 domain bằng Nano Editor

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

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 default_server;

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

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

Redirect toàn bộ www http sang https

Trong block server { ... } ở phía trên cùng:

+ Chuyển server_name www.hocvps.com; thành server_name hocvps.com www.hocvps.com;

+ Chuyển rewrite ^(.*) http://hocvps.com$1 permanent; thành rewrite ^(.*) https://hocvps.com$1 permanent;

Kết quả được như sau:

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

Lúc này khi truy cập https://hocvps.com và http://www.hocvps.com sẽ tự động redirect sang https://hocvps.com

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

Lúc này khi truy cập https://www.hocvps.com sẽ tự động redirect sang https://hocvps.com

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

Lưu ý:

  • Chỉ thiết lập đối với domain chính cài HocVPS – Domain phụ KHÔNG thiết lập.
  • Đây chỉ là bước tùy chọn, nếu bạn sử dụng Cloudflare và kích hoạt đám mây màu vàng ẩn IP thì không làm bước này mà sử dụng link http://IP:port để vào khu vực quản trị HocVPS Script Admin.

Ví dụ khi cài đặt mình để port mặc định 2018 thì sẽ tìm block cuối cùng server { ... } trong file cấu hình domain .conf có dòng listen 2018;

Cấu hình SSL cho port HocVPS tương tự như bên dướ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;
	
	...

Lúc này truy cập HocVPS Script Admin qua https://domain.com:2018

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


_ Cấu hình SSL cho domain không phải domain chính trong HocVPS Script:

  • Không thiết lập HocVPS Admin Port
  • Bỏ tham số default_server bên cạnh listen 443

_ Để kết hợp sử dụng CDN Cloudflare (biểu tượng đám mây vàng):

  • Thiết lập Full (strict) trong menu Crypto SSL tại trang quản lý Cloudflare.
  • Không cấu hình SSL phần Admin HocVPS. Khi đó, truy cập HocVPS Admin bằng ip:port
  • Không thể gia hạn tự động SSL Let’s Encrypt. Gia hạn thủ công 3 tháng 1 lần.

_ Cấu hình HTTP/2 tham khảo Kích hoạt HTTP/2 với Nginx.
_ Tham khảo thêm Tối ưu HTTPS trên Nginx.


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

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

Khởi động lại Nginx

service nginx restart

Giờ truy cập vào domain để tận hưởng thành quả thôi.

Cai dat chung chi Let's Encrypt thanh cong

Lưu ý:

  • Bạn phải chuyển toàn bộ link image, js, css từ http:// sang https:// thì mới có biểu tượng màu xanh như demo. Xem thêm hướng dẫn.
  • Nếu bạn dùng WordPress, hãy cài đặt plugin Really Simple SSL để tự động redirect http sang https và chuyển toàn bộ link .css, .js sang https. Thanh địa chỉ lúc này sẽ có màu xanh.
  • Nếu không muốn dùng plugin tự động Really Simple SSL, bạn hãy tham khảo thêm Hướng dẫn cài đặt Let’s Encrypt trong cPanel để biết cách thao tác thủ công.

3/ Cập nhật cấu hình trong Google Search Console và Analytics

Phần này bắt buộc phải làm để không làm ảnh hưởng đến thứ hạng từ khóa trên Google của website, mình đã có hướng dẫn chi tiết từng bước trên Canh Me, mời bạn tham khảo tại link này.

4/ Tự động gia hạn Let’s Encrypt

Chứng chỉ Let’s Encrypt chỉ sử dụng được trong vòng 90 ngày và bạn cần phải chạy lại dòng lệnh bên dưới để gia hạn.

certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

Tuy nhiên, mình sẽ hướng dẫn các bạn cấu hình để tự động gia hạn chứng chỉ này với crontab, như vậy chúng ta sẽ sử dụng SSL miễn phí trọn đời mà không cần phải lo về việc gia hạn nữa.

Mở file cấu hình crontab:

# EDITOR=nano crontab -e

Copy và paste đoạn code bên dưới vào cửa sổ terminal:

30 2 * * * /usr/bin/certbot 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

crontab trên sẽ tự động chạy lệnh gia hạn Let’s Encrypt vào lúc 2h30 hàng ngày và kiểm tra xem đã hết hạn chưa và tiến hành gia hạn. Trước khi gia hạn sẽ stop Nginx, sau đó sẽ start lại ngay lập tức. Như vậy, gần như không ảnh hưởng gì cả đến website.

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

Lưu ý: Nếu chứng chỉ không tự động gia hạn, kiểm tra theo mục 6.Một số vấn đề gặp phải

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:

# Remove Let's Encrypt
certbot delete

Tiếp theo nhập số thứ tự chứng chỉ tương ứng với tên miền bạn muốn xóa, nhấn Enter là mọi thứ sẽ được dọn dẹp sạch sẽ.

6/ Một số vấn đề gặp phải

Đến ngày hết hạn mà chứng chỉ Let’s Encrypt không tự động gia hạn, mặc dù crontab vẫn chạy, kiểm tra log không thấy thông tin gì đặc biệt? Chạy lệnh gia hạn thủ công thì lại được. Theo kinh nghiệm của mình thì vấn đề ở mã nguồn Let’s Encrypt hoặc PATH service

Đối với vấn đề mã nguồn, chỉ cần clone lại bộ code của Let’s Encrypt là sẽ giải quyết được vấn đề.

# cd /opt/letsencrypt && git pull

Nếu gặp thông báo lỗi thì sử dụng lệnh này: # cd /opt/letsencrypt && git reset --hard && git pull

Đối với vấn đề PATH service, các bạn chú ý những dấu hiệu sau:
Kiểm tra nội dung /var/spool/mail/root thấy:

Failed to find executable /usr/sbin/service in PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
Unable to find pre-hook command /usr/sbin/service in the PATH.
(PATH is /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

Kiểm tra nội dung /var/log/cron thấy cronjob vẫn chạy hàng ngày. Kiểm tra nội dung /var/log/le-renew.log và bên trong /var/log/letencrypt không thấy gì khả nghi.

– Nguyên nhân: service không nằm trong PATH, vấn đề này gặp ở 1 số VPS.

# whereis service
service: /sbin/service /usr/share/man/man8/service.8.gz
# echo $PATH
/usr/bin:/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

Có thể thấy, lệnh service nằm trong /sbin/service, không thuộc biến môi trường PATH. Crontab chỉ tìm /usr/sbin/service và không thấy.

– Giải pháp::
Bạn cần sử dụng đường dẫn cụ thể để chạy lệnh service trong crontab. Vị trí sẽ tùy thuộc vào từng hệ thống, kiểm tra bằng # whereis service.

Ví dụ, khi là /sbin/service thì câu lệnh chèn vào crontab sẽ như sau:

30 2 * * * certbot renew --pre-hook "/sbin/service nginx stop" --post-hook "/sbin/service nginx start" >> /var/log/le-renew.log

– Dấu hiệu: Đến ngày hết hạn thì không thể renew, với thông báo:

Renewal configuration file /etc/letsencrypt/renewal/hocvps.com.conf produced an unexpected error: [('PEM routines', 'PEM_read_bio', 'no start line')]. Skipping.

No renewals were attempted.

Hoặc expected /etc/letsencrypt/live/hocvps.com/cert.pem to be a symlink
– Nguyên nhân: Bộ chứng chỉ bị corrupt khiến Let’s Encrypt không thể đọc và renew.

Kiểm tra nội dung cert và private key:

# openssl x509 -noout -text -in /etc/letsencrypt/live/hocvps.com/cert.pem
unable to load certificate
3077703404:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
# openssl rsa -noout -text -in /etc/letsencrypt/live/hocvps.com/privkey.pem -check
unable to load Private Key
3078170348:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: ANY PRIVATE KEY

Kiểm tra MD5 của cert và key (trùng nhau là ok):

# openssl x509 -noout -modulus -in fullchain.pem | openssl md5
# openssl rsa -noout -modulus -in privkey.pem | openssl md5

Kiểm tra danh sách cert trong VPS

#  certbot certificates
Found the following certs:
  Certificate Name: hocvps.com
    Domains: hocvps.com www.hocvps.com
    Expiry Date: 2018-05-27 09:15:09+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/hocvps.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/hocvps.com/privkey.pem
-------------------------------------------------------------------------------

– Giải pháp: xóa hoàn toàn cert cũ rồi issue lại cert mới (như mục 1.)

# cd /opt/letsencrypt
# ./certbot delete --cert-name hocvps.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Deleted all files relating to certificate hocvps.com.
-------------------------------------------------------------------------------

– Nguyên nhân & Dấu hiệu:
VPS không thể kết nối ra ngoài qua giao thức HTTPS, khi đó cũng không thể issue/renew các chứng chỉ SSL. Ví dụ không thể truy cập qua HTTPS

# curl https://google.com
curl: (77) Problem with the SSL CA cert (path? access rights?)
#curl https://github.com/letsencrypt/letsencrypt
curl: (35) SSL connect error

– Giải pháp:
Đối với lỗi (77): cài đặt lại chứng chỉ trong VPS:
Bước 1: Di chuyển/Đổi tên chứng chỉ cũ

  • CentOS6 chứng chỉ lưu tại /etc/ssl/certs/ca-bundle.crt
  • CentOS7 chứng chỉ lưu tại /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

Bước 2: Cài đặt lại chứng chỉ. Khi đó, bạn có thể curl HTTPS và issue/renew chứng chỉ bình thường.

# yum reinstall -y ca-certificates

– Đối với lỗi (35) – Cập nhật NSS

# yum update nss -y

Chúc bạn thành công.

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

2,208 Comments

  1. Tam Truong 11 comment

    Cài ssl hơi bị rối. Ad có thể làm cho đơn giản cho người mới đễ sử dụng.

    1. Việt Phương Moderator

      Đây là phương pháp tối ưu nhất dành cho VPS rồi bạn nhé. Nếu bạn đơn giản cấu hình SSL thì sẽ không đảm bảo hoàn toàn

  2. Anh Le 15 comment

    Mình đang dùng hosting cũ và dùng SSL của comodo giờ cài lại trên hocvps script như thế nào nhỉ ?

  3. Anh Z 56 comment

    Hi ad,

    Mình làm theo hướng dẫn thì gặp lỗi này ? Cho hỏi nó là j vậy ạ.

    Problem binding to port 80: Could not bind to IPv4 or IPv6.

    Cảm ơn ad.

        1. Việt Phương Moderator

          Và cả 2 record domain và www domain bạn đều đã trỏ về ip VPS? Và nếu dùng Cloudfare thì đã ngắt mây vàng?

  4. Thao Hoang 26 comment

    Admin ơi, mình cài thêm chứng chỉ SSL cho tên miền thứ 2 trong vps của mình chạy Script Hocvps.
    Kết quả ra như thế này. Admin giúp mình với

    [root@vultr home]# nginx -t
    nginx: [warn] conflicting server name “tdera.com” on 0.0.0.0:80, ignored
    nginx: [warn] conflicting server name “www.tdera.com” on 0.0.0.0:80, ignored
    nginx: [warn] conflicting server name “tdera.com” on 0.0.0.0:80, ignored
    nginx: [warn] conflicting server name “www.tdera.com” on 0.0.0.0:80, ignored
    nginx: [warn] conflicting server name “www.tdera.com” on 0.0.0.0:443, ignored
    nginx: [warn] conflicting server name “tdera.com” on 0.0.0.0:443, ignored
    nginx: [warn] conflicting server name “www.tdera.com” on 0.0.0.0:443, ignored
    nginx: [warn] conflicting server name “tdera.com” on 0.0.0.0:443, ignored
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: [emerg] open() “/home/1.tdera.com/logs/access.log” failed (2: No such file or directory)
    nginx: configuration file /etc/nginx/nginx.conf test failed

    1. Việt Phương Moderator

      1. Trùng lặp. Trong thư mục /etc/nginx/conf.d có hơn 2 đoạn cấu hình tderacom:80. Tương tự với mấy dòng dưới. Bạn xem trùng ở đâu thì xóa đi. Có thể bạn làm tận 2 file cấu hình cho domain này
      2. Không tìm thấy log của 1.tdera.com.Bạn nếu tạo domain bằng hocvps menu thì cũng phải xóa bằng hocvps menu nhé

        1. Việt Phương Moderator

          Bạn đã trỏ A Record của www về IP VPS chưa? Mình check thì chưa tạo thì phải, vẫn ở namecheap. Có mỗi domain là trỏ về IP VPS

      1. su 12 comment

        mình đã lưu và restart vps nhưng k xuất hiện ssl
        lúc cài có bị lỗi

        Saving debug log to /var/log/letsencrypt/letsencrypt.log
        Plugins selected: Authenticator standalone, Installer None

        1. Việt Phương Moderator

          Nếu cài lỗi –> Cert không được issue –> Nginx bạn còn lỗi cơ
          Đây Nginx bạn không lỗi. Cho mình nội dung của
          service nginx restart && nginx -t
          ls -al /etc/letsencrypt/live/
          ls -al /etc/nginx/conf.d
          Và nội dung Nginx Conf của site bạn vừa cài SSL

          1. Việt Phương Moderator

            Nếu không có gì hết thì mình nghĩ file cấu hình Nginx Webserver cho domain đó của bạn không phải file ý. Nên việc bạn sửa file đó không có tác dụng gì. Bạn hệ thống control panel gì? Kết quả của ls -al /etc/nginx

          2. Việt Phương Moderator

            Mình thấy 2 file domain và domain.conf. Bạn sửa file nào? Cho mình full nội dung cả 2 file đó

          3. su 12 comment

            à được rồi, cám ơn bạn, mình sửa nhầm file domain, đúng là phải domain.conf
            làm phiền bạn rồi 😀

          4. Việt Phương Moderator

            Nếu thế thì bạn đã tạo mới file domain. Xóa file ý đi bạn nhé

  5. hieumaric 4 comment

    ad cho em hỏi chút
    site của em dns qua cloudflare
    em đã cài ssl như bài hướng dẫn của ad và dùng rất ngon. Nhưng nếu em bật CDN của cloudflare và ssl của cloudflare thì lỗi không truy cập được trang ! nhưng nếu em tắt đi thì lại bình thường. Giờ em đang muốn sử dụng CDN của cloudflare nhưng không thể bật được? mong ad giúp đỡ

  6. Tuấn Anh 24 comment

    Khi nhập email xong nó báo time out Luân ạ, mình thử xóa vps cài lại đều bị.

  7. Lê Văn Thuấn 22 comment

    Một VPS mình cài 3 domain chung 1 IP, đã cài ssl cho cả 3, vậy ở bước 4 mình chỉ làm 1 lần là áp dụng cho cả 3 domain trên luôn phải không ad

  8. Nam Duy 110 comment

    Mod ơi, mình gia hạn copy cả list domain thì nó chỉ rênew cái domain cuối cùng, còn mấy domain còn lại trong list thì k renew
    Mình đang update lại cái crontab hi vong tự rênew đc chứ hiện giờ toàn ngòi copy enterr từng cái domain một, oải quá

    1. Việt Phương Moderator

      Lệnh renew thủ công cũng sẽ chỉ renew những chứng chỉ nào hạn còn <30 ngày thôi bạn nhé
      /opt/letsencrypt/letsencrypt-auto renew –pre-hook “service nginx stop” –post-hook “service nginx start”

      1. Nam Duy 110 comment

        ok, mình sẽ áp dụng cách này.
        Cho mình hỏi thêm là tự dưng cái port phpmyadmin của minh không vào đc, vô ssh, ftp và website vẫn hoạt động bt. Check chỗ nào giờ b nhỉ?

        1. Việt Phương Moderator

          Bạn chạy chuỗi lệnh sau, Rồi đăng nhập xem được không

          # mv /etc/nginx/conf.d/invipcard.net.conf /etc/nginx/conf.d/ainvipcard.net.conf
          # service nginx restart

          Mà mình test thấy đăng nhập đc mà nhỉ: http://prntscr.com/hvv6re

          1. Việt Phương Moderator

            Thế bạn phải gửi Nginx Conf cả 2 cái mới được. Paste qua pastebin cho gọn nhé

          2. Nam Duy 110 comment

            GIờ mình vô nó bị điên mất r
            Reboot trong panel ramnode đc nhưng vps k vô dc
            Status: Waiting to retry…
            Status: Connecting to 168.235.92.222:2222…
            Response: fzSftp started, protocol_version=8
            Command: open “root@168.235.92.222” 2222
            Error: Connection refused
            Error: Could not connect to server

          3. Việt Phương Moderator

            Bạn kiểm tra đăng nhập quả web console bên Ramnode cung cấp xem được không để xem vấn đề từ đâu nhé.
            Và mình truy cập thì có thấy bị redirect gì đâu? Nếu ý bạn là mỗi phần domain_chính:2310 thì thực hiện fix như mình bảo đó

          4. Việt Phương Moderator

            Thì bạn có cài HTTPS cho invipcard.net đâu mà đòi truy cập qua HTTPS? Nên tất nhiên nó sẽ redirect về 1 HTTPS khác trong server rồi
            Bạn tự gõ HTTPS chứ chỉ gõ domain thì đã xử lý qua HTTP 80 rồi

          5. Nam Duy 110 comment

            Mình chạy lệnh cài rồi mà?
            Có cần vô file conf kia chỉnh như bài trên hướng dẫn k Phương?

          6. Việt Phương Moderator

            Nginx Conf bạn paste ra thì invipcard.net có cài gì đâu? Bạn đọc đầy đủ bài hướng dẫn nhé

          7. Nam Duy 110 comment

            Ahuhu, char hiểu sao giờ nginx mình không khởi đọng được luôn rồi. Nghichj sai cái gì k biết nữa :((
            [root@THANG4 letsencrypt]# service nginx start
            Redirecting to /bin/systemctl start nginx.service
            Job for nginx.service failed because the control process exited with error code. See “systemctl status nginx.service” and “journalctl -xe” for details.

          8. Việt Phương Moderator

            Bạn làm như nó bảo đó systemctl status nginx.service -l
            nginx -t

          9. Việt Phương Moderator

            nginx: [emerg] open() “/home/incardvisit.comm/logs/access.log” failed (2: No such file or directory)
            Không tồn tại file nào như trên nhưng trong cấu hình Nginx Conf lại khai báo nó.
            Nếu bạn thêm domain lỗi mà xóa thủ công thì phải xóa luôn của Nginx Conf domain đó nhé

          10. Việt Phương Moderator

            Login incorrect thì chỉ có sai pass thôi bạn nhé. Bạn liên hệ support ticket xem

          11. Nam Duy 110 comment

            Mình change liên tục mấy lần, để cái pass như trong ảnh rồi. Gõ lại từng chữ với user root mà vẫn lỗi. Ticket thì nó bảo k hỗ trợ. Bực thế k biết nữa. Giờ không khởi động đc nginx nữa 🙁

          12. Việt Phương Moderator

            VPS1 : Thế thì bạn chỉ có reinstall VPS và cài lại thôi
            VPS2 : Fixx Nginx như mình đã bảo

          13. Việt Phương Moderator

            Uhm bạn. Mình kiểm tra IP thì cả port 22 và 2222 của VPS đều đã đóng. Truy cập qua web console thì không truy cập được. Vậy đâu còn phương án nào truy cập được vào hệ thống đâu

          14. Việt Phương Moderator

            Vậy bạn cố reboot hay restart xem sao vào đc chứ hết cách rồi

          15. Nam Duy 110 comment

            Minh vô đc vnc rồi và cũng lỗi như vps kia
            # service nginx start
            Redirecting to /bin/systemctl start nginx.service
            Job for nginx.service failed because the control process exited with error code. See “systemctl status nginx.service” and “journalctl -xe” for details.

            Nhưng k hiểu sao chỉ vào đc vnc mà k vào đc ftp và Terminal cứ báo

            [SSH] ERROR: setsockopt SO_KEEPALIVE: Invalid argument
            [SSH] CONNECT 168.235.92.222
            [SSH] FAIL: ssh_exchange_identification: read: Connection refused

            [SSH] INFO: DISCONNECT

          16. Việt Phương Moderator

            nginx -tsystemctl status nginx -l của bạn ra kết quả gì

          17. Nam Duy 110 comment

            Minh vao dc vnc và gõ hocvps và backup đc bình thường. Nhưng web k vào đc: http://prntscr.com/hwxhe6
            Dạo này hocvps có vde gì về bảo mật ấy, cứ move site qua là bị, mình vừa bị thêm 1 cái vps nữa: 139.99.100.248
            Move mấy cái domain có https qua rồi tự dưng login ssh k được và lăn quay ra

          18. Việt Phương Moderator

            _ Hệ thống website không liên quan đến SSH nhé bạn, độc lập nên không ảnh hưởng đến SSH được.
            _ Log bạn thì báo không tồn tại “/var/log/nginx/error.log”. Bạn cung cấp kết quả của

            ls -al /var/log/nginx/

            – Và ngay khi bạn cài đặt xong VPS thì kết quả test Nginx như thế nào. Hiện test thử VPS mới CentOS 6 và CentO 7 đều hoàn toàn bình thường

          19. Việt Phương Moderator

            Một đống conflict server_name kìa. Ví dụ một cái nginx: [warn] conflicting server name “ghepcard.com” on 0.0.0.0:80, ignored
            Nghĩa là trong /etc/nginx/conf.d có tận 2 chỗ quy định ghepcard.com:80
            Bạn kiểm tra lại và xóa bớt đi. Chắc bạn copy Nginx vào và không xóa Nginx mới tạo đi?

          20. Nam Duy 110 comment

            Bên nhà cung cấp dediserve đã fix lỗi cho mình là tạo file log là nó hết bị rồi.
            Nhưng giờ vào port của vps thì nó mới bi 502 Phương ạ

            Ps: cái vps bên OVH thì nó k fix cho mình, nên vẫn bị k log đc vô ssh

          21. Việt Phương Moderator

            1. Nginx như bạn thì vẫn 1 đống lỗi conflict server_name còn gì
            2. Nếu thiếu file error.log thì bạn tạo và phân quyền nginx:nginx cho nó
            touch /var/log/nginx/error.log
            chown nginx:nginx /var/log/nginx/error.log

          22. Nam Duy 110 comment

            Chắc do miinhf add domain mà quên change port, tý mình xóa hết file conf đi xem còn lỗi k. Vì domain đó cũng chưa trỏ về vps.

            Cho mình hỏi là cái vps thuws2: ở OVH hiện tại chỉ vào đc kvm chế độ rescue. CÓ cách nào khởi động nginx cho nó hoạt động k Phương?

          23. Việt Phương Moderator

            VPS bạn chuyển sang trạng thái rescue mode thì sau đó bạn phải mount lại phân vùng. Vấn đề kĩ thuật phần cứng này bạn liên hệ OVH support thì tốt hơn, mình không nắm rõ. Cụ thể là hiện hệ thống đang chạy trên phân vùng rescue, không phải phân vùng ban đầu

          24. Việt Phương Moderator

            Hệ thống bạn vẫn đang ở phân vùng Rescue Mode. Bằng chứng là bạn không thể gọi lệnh hocvps đó thôi
            Cũng như bạn chạy service nginx start thì rõ

  9. HuynhNhon 3 comment

    sao trong thư mục /etc/nginx/conf.d của em lại ko có file nào nhỉ… ở bước cấu hình nginx ý ạ
    em cảm ơn

    1. Việt Phương Moderator

      ls -al /etc/nginx/ của bạn ra kết quả gì
      Và hệ thống bạn là gì? Có sử dụng Nginx không? Vì nhiều hệ thống có thể Nginx đặt vị trí khác, dù /etc/nginx là mặc định đa số rồi

      1. HuynhNhon 3 comment

        đây bác:
        total 8
        drwxr-xr-x 2 root root 4096 Oct 18 08:12 .
        drwxr-xr-x 5 root root 4096 Jan 1 09:38 ..
        Em dùng Nginx-Centos7 x64

        1. Việt Phương Moderator

          Ý là bạn tự cài Nginx hay dùng script gì. whereis nginx của bạn ra kết quả gì

          1. HuynhNhon 3 comment

            ra KQ này ạ:
            nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man3/nginx.3pm.gz /usr/share/man/man8/nginx.8.gz

          2. Việt Phương Moderator

            Hoàn toàn bình thường. Vậy thì bạn kiểm tra hết các thư mục được liệt kê xem cấu hình Nginx. Chứ bình thường là ở /etc/nginx hết. Hoặc bạn gửi VPS qua support@hocvps.com mình xem trực tiếp cho

      1. Trần Linh 13 comment

        A ơi nếu như tên miền hết hạn thì có thể truy cập theo ip máy chủ được không và có ảnh hưởng gì không ạ

        1. Việt Phương Moderator

          Không truy cập được theo IP máy chủ bạn nhé. Bạn back cấu hình Nginx về ban đầu, thời điểm chưa cài SSL

          1. Trần Linh 13 comment

            E thêm sub domain thì nhận được dãy đỏ
            “An unexpected error occurred:
            The request message was malformed :: Error creating new authz :: Invalid character in DNS name”

            Vậy e xử lý thế nào ạ?

          2. Việt Phương Moderator

            Subdomain của bạn có kí tự đặc biệt, không chấp nhận. Bạn issue lại nhé

          3. Việt Phương Moderator

            có thể trong quá trình nhập bạn bật gõ tiếng việt rồi sửa kí tự, cũng như A Record của sub bạn trỏ về IP VPS chưa?

  10. Quan Nguyên Phát 52 comment

    Mình cài cho domain chính của VPS, khi vào theo link login HocVPS Script Admin vì chứng chỉ thành công, màu xanh. Nhưng khi vào link website bình thường thì màu đỏ. (Website này mình chưa cài đặt gì, chỉ để trống). Khi click xem thông tin chứng chỉ thì lại báo “Issued to” cho 1 domain con trên VPS của mình.

    Link domain chính: http://quannguyenphat.com
    Link domain con http://buiteam.com

    Mình kiểm tra trong nano /etc/nginx/conf.d/hocvps.com.conf cũng không thấy xuất hiện domain con, cài lại chứng chỉ cho domain chính cũng bị thế.

    Nhờ bạn hỗ trợ. Cảm ơn bạn.

    1. Quan Nguyên Phát 52 comment

      Với khi mình kiểm tra
      nginx -t

      Thì phản hồi lại
      nginx: [warn] conflicting server name “www.quannguyenphat.com” 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

      Có dòng đầu tiên khác với hướng dẫn của bạn.

      1. Việt Phương Moderator

        Cho mình toàn bộ các Nginx Conf trong thư mục /etc/nginx/conf.d nhé. Và kết quả của
        ls -al /etc/letsencrypt/live/

        1. Quan Nguyên Phát 52 comment

          kết quả ls -al /etc/letsencrypt/live/

          total 32
          drwx—— 8 root root 4096 Dec 30 19:25 .
          drwxr-xr-x 9 root root 4096 Dec 30 19:25 ..
          drwxr-xr-x 2 root root 4096 Dec 26 23:10 buiteam.com
          drwxr-xr-x 2 root root 4096 Dec 27 00:21 canhobangiare.com
          drwxr-xr-x 2 root root 4096 Dec 26 12:52 dulichsinhthaimientay.com
          drwxr-xr-x 2 root root 4096 Dec 25 16:09 mythodaipho.vn
          drwxr-xr-x 2 root root 4096 Dec 30 19:25 quannguyenphat.com
          drwxr-xr-x 2 root root 4096 Dec 27 00:13 xetoyotatiengiang.com

          1. Việt Phương Moderator

            Sửa đoạn này nhé bạn
            index index.php index.html index.htm;
            server_name quannguyenphat.com

  11. Du lịch sinh thái miền tây 3 comment

    Mình làm bước add domain, chạy lên này

    # Start Nginx
    service nginx start

    thì báo lỗi

    Redirecting to /bin/systemctl start nginx.service
    Job for nginx.service failed because the control process exited with error code. See “systemctl status nginx.service” and “journalctl -xe” for details.

    Nhờ bạn hỗ trợ với! Thanks bạn nhiều!

  12. Du lịch sinh thái miền tây 3 comment

    Nếu mình dùng nhiều website trên cùng 1 VPS, chỗ Tự động gia hạn Let’s Encrypt mình chỉ làm 1 lần thôi phải không? Hay mỗi lần thêm website thì cần làm bước này?
    Cảm ơn HocVPS

  13. sơn nguyễn 13 comment

    Trước khi cài Let’s Encrypt thì mình đo tốc độ web được 91 điểm bằng tools.pingdom.com, sau khi cài xong mình còn được 76 điểm với các điểm sau rất thấp:
    F0 Minimize request size
    D 67 Remove query strings from static resources
    C75 Minimize redirects
    C76 Specify a Vary: Accept-Encoding header
    Mong ad giúp đỡ mình cải thiện tốc độ

    1. Việt Phương Moderator

      Cấu hình đúng thì Redirect cũng đc 90 điểm mà. Bạn xem lại cấu hình Nginx Conf nhé

      1. sơn nguyễn 13 comment

        Mình copy y nguyên cái “File cấu hình Nginx cuối cùng sẽ tương tự như sau” , chỉ thay hocvps.com = bongdaso442.com bằng phím ctrl +h của notepad ++ vơi port 2017 = port mình dùng thôi, có khác chỗ nào đâu ad ơi?

  14. sơn hoàng 13 comment

    Mình vừa xóa VPS đi rồi tạo VPS mới với domain cũ mà ko hiểu sao mình ko cài được Wp mặc dù đã dùng Script tự động cài đặt HocVPS Script và WordPress, có phải do chứng chỉ lets encrypt mình cài ở domain với VPS ko nhỉ ad?

    1. Việt Phương Moderator

      Về cơ bản, không có gì chặn bạn cài WP cả. Bạn gặp thông báo gì

      1. sơn hoàng 13 comment

        CPU Usage 48% mặc dù mình mới chỉ cài Script tự động cài đặt HocVPS Script và WordPress trc đây thường chỉ mất 3%, https://bongdaso442.com/wp-admin ko truy cập được để cài wp, chắc do https rồi, có cách nào khắc phục ko ad ơi?

        1. Việt Phương Moderator

          wp-admin thì bạn đã cài SSL cho site ý trên VPS mới chưa? Bạn kiểm tra service nginx nhé

  15. sơn nguyễn 13 comment

    Mình cấu hình như các bước trên đến bước: Kiểm tra lại cấu hình Nginx: nginx -t
    Thì phản hồi như sau:
    nginx: [emerg] BIO_new_file(“/etc/letsencrypt/live/bongdaso442.com/fullchain.pem”) failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/etc/letsencrypt/live/bongdaso442.com/fullchain.pem’,’r’) error:2006D080:BIO routines:BIO_new_file:no such file)
    nginx: configuration file /etc/nginx/nginx.conf test failed
    Bạn giúp mình chỉnh sửa với, không hiểu sao ko được

    1. Việt Phương Moderator

      Không tồn tại chứng chỉ bongdaso442.com. Bạn kiểm tra lại thư mục /etc/letsencrypt/live/bongdaso442.com nếu không tồn tại thì bạn issue lại chứng chỉ đi, không thành công rồi

      1. sơn nguyễn 13 comment

        Mình chỉnh sửa thì nó lại bị lỗi này:
        nginx: [emerg] invalid parameter “443” in /etc/nginx/conf.d/bongdaso442.com.conf:21
        nginx: configuration file /etc/nginx/nginx.conf test failed

          1. sơn nguyễn 13 comment

            Mình issue lại chứng chỉ rồi mà không thành công rồi, bạn có thể hướng dẫn cụ thể hơn ko

          2. Việt Phương Moderator

            Từng lỗi cụ thể mình chỉ từng fix cụ thể như thế còn gì bạn. Bạn không mô tả lỗi hay cung cấp đầy đủ thông tin thì chịu thôi

  16. Binh 3 comment

    Trước khi mình cài SSL thấy server respone time < 200ms nhưng sau khi mình cài chỉ số đó tăng lên tầm từ 400ms – 600ms. Liệu nguyên nhân có phải do cấu hình SSL không bạn, có cách nào cải thiện không hả bạn.

    1. Việt Phương Moderator

      Chứng chỉ thì bạn cứ để nguyên đó còn Nginx Conf bạn sửa về như ban đầu, xong restart Nginx

      1. DO DINH TUAN 56 comment

        Admin ơi mình ko muốn dùng ssl nữa và đã sửa cấu hình file nginx conf về như ban đầu và web hoạt động bình thường. Nhưng giờ vào web có https bị báo lỗi và ko tự redict 301 về site http đc. Bạn chỉ giúp mình với vì nếu ko chuyển redict 301 https về http đc thì các thứ hạng SEO của mình sẽ mất hết. Mong admin giúp đỡ với ak. Mình cám ơn nhiều ak!

        1. Việt Phương Moderator

          Bạn thêm block rewrite tương tự như hướng dẫn thôi, chỉ là đảo ngược
          server {
          listen 443;
          server_name hocvps.com www.hocvps.com;
          rewrite ^(.*) http://hocvps.com$1 permanent;
          }

          1. DO DINH TUAN 56 comment

            Bạn ơi mong bạn giúp mình với mình vẫn chưa chỉnh làm sao để website tự động rediect 301 https về http đc. Đây là file cấu hình file ngix conf củ mình..Bạn xem được chưa và sửa lại giúp mình với..cám ơn bạn nhiều lắm!

            server {
            listen 443;
            server_name mizukiparkbinhchanh.info http://www.mizukiparkbinhchanh.info;
            rewrite ^(.*) http://mizukiparkbinhchanh.info$1 permanent;

            }
            server {
            listen 80 default_server;
            root /home/mizukiparkbinhchanh.info/public_html;
            server_name mizukiparkbinhchanh.info;
            }

          2. Việt Phương Moderator

            Cấu hinh bạn đúng rồi. Bạn restart Nginx cũng như sửa lại Site URL và WP URL chưa?

          3. Việt Phương Moderator

            Trinh duyệt của bạn dính HSTS nên bạn phải thử bằng trình duyệt khác nhé. Như trong ảnh ấn Proceed to mizukiparkbinhchanh.info (unsafe) là ra site không HTTPS tức http://…..
            http://prntscr.com/i21xkr
            Nó vẫn sẽ yêu cầu 1 SSL để xử lý các request 443 nên bạn vẫn cần SSL cho cái block 443 redirect về 80 đó

          4. DO DINH TUAN 56 comment

            Admin ơi..vậy là cấu hình file ngix của mình đúng rồi và ko cần chỉnh sửa gì thêm đúng ko bạn!

          5. DO DINH TUAN 56 comment

            admin ơi làm ntn để khi 1 người vào website ko hiện lên kết nối của bạn ko phải là kết nối riêng tư. Admin chỉ dùm mình với

          6. Việt Phương Moderator

            Như mình đã nói, request vẫn là 443 thì vó vẫn sẽ yêu cầu 1 SSL để xử lý các request 443 nên bạn vẫn cần SSL cho cái block 443 đó.
            Mặc dù ngay lập tức redirect về 80
            Nó giống như trong bài viết block www.domain:443 redirect về domain:443 vẫn phải cài SSL

          7. DO DINH TUAN 56 comment

            Mình đã cái ssl và chỉ sửa cấu hình nigx conf thôi.. vậy có cần thêm đoạn code nào vào file ngix conf nữa ko bạn hay ntn ak.. mình mới tập cái site trên vps bằng hocvps nên ko biết gì cả..mong bạn giúp đỡ

          8. Việt Phương Moderator

            server {
            listen 443;
            server_name mizukiparkbinhchanh.info www.mizukiparkbinhchanh.info;
            ssl_certificate file_chứng_chỉ;
            ssl_certificate_key file_key;
            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 ^(.*) http://mizukiparkbinhchanh.info$1 permanent;
            }

  17. hai 3 comment

    kết quả của dòng này là
    #crontab -l
    30 2 * * * /opt/letsencrypt/letsencrypt-auto renew –pre-hook “service nginx stop” –post-hook “service nginx start” >> /var/log/le-renew.log

    mà lúc add task nó lại bị như này

    # crontab: installing new crontab
    -bash: crontab:: command not found

    đã check và cài crontab https://hocvps.com/tong-quat-ve-crontab/, admin giúp được không ?

      1. hai 3 comment

        như trên
        #crontab -l
        30 2 * * * /opt/letsencrypt/letsencrypt-auto renew –pre-hook “service nginx stop” –post-hook “service nginx start” >> /var/log/le-renew.log

  18. Thảo H 26 comment

    admin oi. cài htps trên 1 server thì chỉ cần gia hạn cái domain gốc. hay là mỗi lần add thêm domain phải gia hạn 1 lần vậy ah

    1. Việt Phương Moderator

      Dòng tự động gia hạn hay gia hạn tự động áp dụng cho toàn bộ các chứng chỉ Let’s Encrypt trên VPS nhé. Nó sẽ tự check chứng chỉ nào còn hạn <30 ngày thì gia hạn, không thì bỏ qua. Nên bạn chỉ cần thêm crontab 1 lần duy nhất thôi

  19. hieu 5 comment

    Việt Phương cho mình hỏi sau khi cài xong https rồi truy cập vào site vẫn bình thường. Nhưng giờ ko truy cập được vào “https:domain.com:port/filemanager cũng như phpMyAdmin HocVPS Script Admin mình nhận được lỗi 403 Forbidden. Mình đã vào menu hocvps và chọn 14 phân quyền rồi vẫn không được.

    1. Việt Phương Moderator

      Cho mình nội dung Nginx Conf bạn vừa sửa, paste qua pastebin.com cho gọn

          1. hieu 5 comment

            Cái đó mình sửa lại thành auth_basic_user_file /home/domain.com/private_html/hocvps/.htpasswd; vẫn không được việt phương ạ. Thậm chí có 1 site đang hoạt động mình đổi hocvps thành cái khác nó vẫn truy cập như thường. chứng to cái đấy hình như ko ảnh hưởng thì phải 🙁

          2. hieu 5 comment

            Hay có cách nào xóa để cài lại ssl từ đầu không nhỉ? Mà giờ xóa đi chắc gì nó đã vào được quản lý file hay phpadmin 🙁

          3. Việt Phương Moderator

            1. Bản chất bạn sai cấu hình Nginx Conf chứ chứng chỉ SSL không sai. Lại thì bạn để Nginx Conf về như cũ là được
            2. Bạn gửi VPS qua support@hocvps.com mình xem cho

          4. Việt Phương Moderator

            Done. Các bạn khi sửa lại thì nhớ restart service nhé

  20. Quang Tuấn 21 comment

    Cho mình hỏi bị như thế này là do cái gì vậy ad. Xin cảm ơn

    Failed authorization procedure. http://www.hatgiongtrithuc.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Timeout, hatgiongtrithuc.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Timeout

    IMPORTANT NOTES:
    – The following errors were reported by the server:

    Domain: http://www.hatgiongtrithuc.com
    Type: connection
    Detail: Timeout

    Domain: hatgiongtrithuc.com
    Type: connection
    Detail: Timeout

    To fix these errors, please make sure that your domain name was
    entered correctly and the DNS A/AAAA record(s) for that domain
    contain(s) the right IP address. Additionally, please check that
    your computer has a publicly routable IP address and that no
    firewalls are preventing the server from communicating with the
    client. If you’re using the webroot plugin, you should also verify
    that you are serving files from the webroot path you provided.
    – 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.
    [root@localhost letsencrypt]# ./letsencrypt-auto certonly –standalone
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Plugins selected: Authenticator standalone, Installer None
    Please enter in your domain name(s) (comma and/or space separated) (Enter ‘c’
    to cancel): hatgiongtrithuc.com
    Obtaining a new certificate
    Performing the following challenges:
    tls-sni-01 challenge for hatgiongtrithuc.com
    Waiting for verification…
    Cleaning up challenges
    Failed authorization procedure. hatgiongtrithuc.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Timeout

    1. Việt Phương Moderator

      LE’ không thể kết nối đến www.domain. Bạn đã trỏ wwW record về ip vps chưa?

        1. Việt Phương Moderator

          Ý mình là bạn đang cài SSL cho hatgiongtrithuc.com trên VPS 115.79.29.154 chứ? Và mình thấy lần cập nhật cuối cùng 23/11, không biết là Record bạn mới trỏ à? Một số nhà cung cấp có thể cần 24h mới ổn định

          1. Việt Phương Moderator

            Ý mình là VPS cài SSL có đúng là VPS mà domain trỏ về không. Và cả 2 record đã được trỏ về hơn 24h chưa?

          2. Quang Tuấn 21 comment

            mình mới trỏ ip về domain. domain bên godaddy hay là mới trỏ cần 24h mới cập nhật được nhỉ?

          3. Quang Tuấn 21 comment

            Ok. tại hôm trước cũng làm 1 site rồi. trỏ ip về domain cài Let’s Encrypt nhanh gọn luôn. nay lại bị lỗi.

        1. Việt Phương Moderator

          Ok bạn noted. Đúng là mình không để ý còn case này thật. VPS bạn GG à? Chứ bình thường HocVPs mở port 443 rồi mà

          1. Quang Tuấn 21 comment

            mình tự xây dựng host riêng, mới làm nên còn hơi gà mờ. Thanks ad nhìu nhé.

          2. Việt Phương Moderator

            1. HocVPs không xóa được, bạn chỉ có thể reinstall và cài lại từ đầu
            2. Cho mình Nginx Conf bạn vừa thiết lập để cài SSL. Mình nghĩ bạn cài sai. Và bạn đã mở port 3456 chưa?

          3. Việt Phương Moderator

            Bạn vào cài đặt VPS chọn reinstall VPs đó, như là cài lại Win. Và mình truy cập https://phukiensieucap.com:8888/ ok mà?
            File bạn cấu hình 8888 đâu phải 3456?

  21. NAM 21 comment

    CÁCH CÀI CHUẨN 100%

    Hi mọi ng !
    Mình cài cũng bị 2,3 lần mới okie sau đó mình rút ra được kinh nghiệm này để mọi người cài ít bị lỗi hơn.

    1 > Tắt unikey trước khi cài đặt
    2 > Phần bổ sung thêm domain/subdomain muốn cài đặt Let’s Encrypt, các bạn chạy lại lệnh:
    # Stop Nginx
    service nginx stop

    # Install Let’s Encrypt
    cd /opt/letsencrypt
    ./letsencrypt-auto certonly –standalone

    3 > Cấu hình Nginx (phần này nhiều người gặp lỗi nhất)
    Sau khi các bạn “Tạo file DH parameters 2048 bit” và “Mở file cấu hình lên với nano” => các bạn xóa hết đi => Tiếp đó các bạn coppy tất cả “File cấu hình Nginx cuối cùng sẽ tương tự như sau:” bỏ vào NOTEPAD++ => Các bạn nhấn tổ hợp Ctrl+H thay thế “hocvps.com” bằng “domain” của các bạn ==> sau đó các bạn coppy đống này paste vào file nano cấu hình ==> Ctrl + 0 và enter lưu lại. Ctrl + X thoát ra => và kiểm tra kết quả với nginx -t

    Chúc các bạn thành công !

    1. Việt Phương Moderator

      Lưu ý là phần 3 thì các domain không phải domain chính cài HocVPs thì không cấu hình phần HocVPs Port, cụ thể là phần 2017 như trong hướng dẫn

  22. Tuấn Anh 24 comment

    Luân ơi, mình có tạo subdomain, https cho main domain ok rồi nhưng khi vào = sub thì nó direct về main domain, mình thử thay listen 443 ssl http2; bằng listen 80 default_server; thì nó lại bt.

    Thanks!@

    1. Việt Phương Moderator

      Bạn mô tả lại cụ thể case của bạn đi. Hoặc cung cấp Nginx Conf của domain và subdomain. Paste qua https://pastebin.com/ cho gọn
      Và trước khi cài SSL thì cả sub và main đều hoạt động độc lập bình thường?

  23. LINH IT PRO 8 comment

    Mình cài domain thành công rồi.
    Đến cài subdomain thì nó báo thế này:
    Mong các cao nhân giúp đỡ.

    The following errors were reported by the server:

    Domain: http://www.cms.vrvisit.vn
    Type: connection
    Detail: DNS problem: NXDOMAIN looking up A for http://www.cms.vrvisit.vn

    To fix these errors, please make sure that your domain name was
    entered correctly and the DNS A/AAAA record(s) for that domain
    contain(s) the right IP address. Additionally, please check that
    your computer has a publicly routable IP address and that no
    firewalls are preventing the server from communicating with the
    client. If you’re using the webroot plugin, you should also verify
    that you are serving files from the webroot path you provided.

        1. Việt Phương Moderator

          Hiện Let’s Encrypt nó detect là http://www.cms chưa trỏ về IP VPS nên
          1. Bạn trỏ hẳn * A Record về ip VPS.
          2. Hoặc bạn issue cert cho cms.domain thôi. Vì mình thấy thông thường người dùng họ cũng không truy cập qua https:/www.
          Chụp mình bản DNS Config của bạn. Và hình như bạn không dùng Cloudfare đúng không

  24. Thảo H 26 comment

    Mình cài xong rồi thì kiểm tra ngĩn báo như thế này

    nginx: [emerg] BIO_new_file(“/etc/letsencrypt/live/dunglendi.com/fullchain.pem”) failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/etc/letsencrypt/live/dunglendi.com/fullchain.pem’,’r’) error:2006D080:BIO routines:BIO_new_file:no such file)
    nginx: configuration file /etc/nginx/nginx.conf test failed

    Admin giúp mình khắc phục với, mình mới học nên chưa biết nhiều. AD chỉ cụ thể giúp với ạ

    1. Việt Phương Moderator

      Nginx không thấy cert của bạn.
      1. Cho mình cấu hình Nginx của domain đó. Paste qua https://pastebin.com/ cho gọn
      2. Kết quả lệnh ls -al /etc/letsencrypt/live/

      1. Thao Hoang 26 comment

        [root@server home]# ls -al /etc/letsencrypt/live/
        total 12
        drwx—— 3 root root 4096 Nov 15 09:38 .
        drwxr-xr-x 9 root root 4096 Nov 15 09:38 ..
        drwxr-xr-x 2 root root 4096 Nov 15 09:38 ohbonus.com

          1. Thao Hoang 26 comment

            mình cài 2 web trên 1 server. hqua mình làm cả 2 cái đều bị lỗi như vậy. giờ muốn xóa hết cài lại thì ntn ạ

          2. Việt Phương Moderator

            Cert thì lỗi sẽ không tồn tại cert, thành công thì tồn tại cert.
            Cấu hình nginx thì back về trước khi chỉnh sửa là không ssl, còn chỉnh sửa thì là ssl
            Thế thôi nên chả có cái gì để xóa cả

    1. Việt Phương Moderator

      1. Bạn tắt hết trình gõ tiếng việt (unikey,vietkey) và issue lại cert xem
      2. Cho mình nội dung của /var/log/letencrypt
      3. Cho mình kết quả của ls -al /etc/letsencrypt/live

      1. Duy Khanh 1 comment

        Mình cũng bị giống như bạn này. Domain chính đã làm ngon lành. Nhưng thêm domain trong cùng vps nữa thì báo lỗi y hệt
        1. Mình đã thử tắt , và điền lại lệnh vài lần rồi đều lỗi thế, thử cả điền từng lệnh
        2. File nội dung đó đây https://pastebin.com/yPj0NQ9f
        3. Kết quả của lệnh: ls: cannot access /etc/letencrypt/live: No such file or directory

        Hy vọng đc bạn giúp cảm ơn ^^

  25. Minh Quyet 13 comment

    Ad cho e hỏi chút ạ. E dùng vps cloud google. Vps 1 e đã cài ssl Lét encrypt rồi. Nhưng do e lỡ tay xóa nhầm vps nên e cài lại hocvps mới. E có cần cài lại SSL này ko ạ? Hay là khi xóa vps rồi coi như là domain mới hoàn toàn ạ!

    1. Việt Phương Moderator

      Bạn cài lại SSL nhé. Let’s Encrypt cho issue miễn phí mà, đừng quá 5 cert/7 ngày là đc

      1. Minh Quyet 13 comment

        Ý e là domain đó e đã cài SSL ở vps cũ rồi. Giờ chuyển sang vps mới thì vẫn fai cài lại như bình thường ạ!

  26. Hoàng 4 comment

    Có cách nào tạo Certificate tự động cho tất cả tên miền không nhỉ. Mình có 1 server, và mình muốn tạo name server dạng ns1.hoangsoft.com, ns2.hoangsoft.com sau đó mỗi lần đổi name server cho tên miền đó về 2 name server trên và truy cập tên miền nó sẽ tự tạo ra các Certificate của Let’s Enscrypt cho tên miền đó luôn mà ko phải gõ command.

  27. Trung 5 comment

    Chào bác, sau khi cài thành công Let’s encrypt cho 1 domain trong VPS của em thì cái HocVPS Script Admin không kết nối được (link http://45.32.111.193:2017/). Nhờ bác hỗ trợ cách sửa để vào được file manager/phpadmin…

    1. Việt Phương Moderator

      Bạn đăng nhập bằng domain nhé. Cấu hình SSL phần HocVPS Admin rồi thì không truy cập được qua IP nữa

      1. Trung 5 comment

        Lúc ban đầu cài VPS em lười trỏ domain nên dùng luôn ip làm domain chính.
        Có cách nào khắc phục không ạ? Nếu không thì cũng cám ơn bác đã hỗ trợ.

        1. Việt Phương Moderator

          Nếu thế là bạn cài SSL cho domain phụ? Chứ domain chính là IP thì Let’s Encrypt không có issue SSL đâu. Nếu thế thì cho mình nội dung 2 file .conf của domain chính (chính là IP) và domain phụ

  28. nam nguyễn 13 comment

    Mình làm theo các bước cài đặt rồi mà sao ko thể truy cập vào web được thế admin?
    Không thể truy cập trang web này

    bongda442.info đã từ chối kết nối.
    Hãy thử:
    Kiểm tra kết nối
    Kiểm tra proxy và tường lửa
    ERR_CONNECTION_REFUSED

  29. DO DINH TUAN 56 comment

    Mình gặp phả lỗi này admin giúp mình vs!

    nginx: [emerg] BIO_new_file(“/etc/letsencrypt/live/www.thongtinchungcu.vn/fullchain.pem”) failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/etc/letsencrypt/live/www.thongtinchungcu.vn/fullchain.pem’,’r’) error:2006D080:BIO routines:BIO_new_file:no such file)

    1. Việt Phương Moderator

      Không tồn tại cert /etc/letsencrypt/live/www.thongtinchungcu.vn/. Bạn kiểm tra lại thư mục xem, có thể cert chỉ là /etc/letsencrypt/live/thongtinchungcu.vn/

  30. quoc 5 comment

    mình đang dùng share hosting có xài SSL Let encrypt, giờ chuyển qua xài VPS thì làm thế nào vì đến đoạn CÀI ĐẶT CHỨNG CHỈ LET’S ENCRYPT thì mình bị lỗi do đang sử dụng trên share hosting rồi nên nó ko cho qua bước này.

    1. Việt Phương Moderator

      Bạn phải trỏ tên miền về VPS mới issue được cert nhé. LE làm thế tránh gian lận thôi 🙂

  31. fususu 35 comment

    của em trong error nó xuất hiện chi chít lỗi này là sao hả các bác?

    2017/10/28 22:43:28 [error] 9656#9656: *896556 access forbidden by rule, client: 103.227.176.5, server: mydomain.com, request: “GET /.well-known/acme-challenge/824X4_I4PSOS_V08DDZL0OC-5L__TRAZ HTTP/1.1”, host: “mydomain.com”
    2017/10/28 22:43:29 [error] 9656#9656: *896558 access forbidden by rule, client: 103.227.176.5, server: mydomain.com, request: “GET /.well-known/acme-challenge/C8FMTMNPC_GABP4GR3Z8MWOGL_DLJYIZ HTTP/1.1”, host: “mydomain.com”
    2017/10/28 22:43:29 [error] 9656#9656: *896560 access forbidden by rule, client: 103.227.176.5, server: mydomain.com, request: “GET /.well-known/acme-challenge/G8SIXGLWJWMM4707LTCCHVWSK2SV2JMU HTTP/1.1”, host: “mydomain.com”

    1. Việt Phương Moderator

      Bạn cài Let’s Encrypt theo bài viết này hay theo script nào? Vì mình thấy LE đang đòi truy cập /.well-known/acme-challenge/
      Bạn kiểm tra nếu trong Nginx Conf của domain không có đoạn nào về well-known thì bạn thêm vào, nhớ trong block show web nhé
      # Disable .htaccess and other hidden files
      location ~ /\.(?!well-known).* {
      deny all;
      access_log off;
      log_not_found off;
      }

      1. Fususu 35 comment

        Từ xưa giờ mình trung thành với hocvps mà, mình cài letsencrypt theo hướng dẫn của hocvps, có cài thêm cái httpd2 gì đó nữa 🙂

        1. Việt Phương Moderator

          Khá lạ vì cài LE theo hướng dẫn này không liên quan đến thư mục /.well-known/acme-challenge/.
          1. Bạn fix như comment trên.
          2. Bạn kiểm tra lại nội dung /var/log/letsencrypt/letsencrypt.log sau khi fix (chắc sau 1 ngày), gửi mình file đó

  32. Thuận 6 comment

    “Ví dụ tên miền của mình là hocvps.com thì file cấu hình sẽ có đường dẫn là /etc/nginx/conf.d/hocvps.com.conf”. đến bước này mình bí, Admin giúp mình với. khi mình vô đường dẫn /etc/nginx/conf.d/ thì ko có file config cho từng domain, nó chỉ có file IP_VPS.conf thôi. giờ phải làm sao vậy admin? Thank nhiều!

    1. Việt Phương Moderator

      1. Hệ thống bạn là HocVPS chứ? Lúc cài đặt HocVPS bạn nhập domain hay IP?
      2. Cho mình kết quả câu lệnh ls -al /etc/nginx/conf.d

      1. Thuận 6 comment

        Cảm ơn bạn. Mình cài với script hocvps cũ, cài vestaxp. Mình cài lại với hocvps script mới rôi và đã cài thành công Let’s Encrypt. Cảm ơn bạn đã reply.

        1. Việt Phương Moderator

          Ok bạn. Note là chỉ dùng HocVPS/VestaCP chứ không dùng cả 2 nhé bạn

  33. Quang Huy Tran 26 comment

    Cho em hỏi, em có thể cài SSL let’s encrypt này cho link hocvps script admin https://ip:2017 , rồi cài SSL trả phí mua ở nhà cung cấp khác cho các site đang chạy trong vps đc không ạ ? Túm lại em chỉ muốn cho https://ip:port nhìn đẹp mắt tí thui :))

    1. Việt Phương Moderator

      Mỗi site mỗi cấu hình Nginx riêng nên các SSL riêng, không xung đột nhau nên bạn không lo. Còn Let’s Encrypt hay các nhà cung cấp đều không phát hành SSL cho IP nhé, chỉ cho domain