Home / Linux web server / Cách cài đặt chứng chỉ SSL (HTTPS) lên NGINX
https xuất hiện với ổ khóa xanh sau khi cài đặt SSL

Cách cài đặt chứng chỉ SSL (HTTPS) lên NGINX

Xin chào các bạn, mình là Sơn Trần (cũng là admin của blog HostKia.com này). Ngày nay thì nhu cầu tạo một blog hay website nhỏ để bán hàng hoặc giới thiệu thông tin là rất lớn. Nếu bạn là một công ty bự ơi là bự thì không nói làm gì, bạn có thể thuê người làm hết mọi việc từ thiết kế website cho đến tối ưu cũng như cài đặt chứng chỉ SSL/TLS (https – sau này sẽ gọi chung là SSL) để SEO tốt hơn. Thế nhưng đấy là câu chuyện của mấy người nhiều tiền. Còn bạn, nếu sau khi đã tạo được một blog WordPress theo hướng dẫn trong loạt video này nhưng bạn muốn sử dụng một chứng chỉ SSL mua riêng, chứ không muốn phải xài “hàng chùa” của Let’s Encrypt thì phải làm sao?

Đừng lo, ở bài này thì Sơn sẽ hướng dẫn các bạn cài đặt SSL đã mua ở nhà cung cấp nào đó (Namecheap chẳng hạn). Việc xài một chứng chỉ trả phí hẳn sẽ pro hơn rất nhiều so với việc cài chứng chỉ miễn phí như trong hướng dẫn ở loạt video nói trên. Trong phạm vi bài viết này thì mình sẽ hướng dẫn cài Comodo PositiveSSL, giá của chứng chỉ này là $9/năm, nếu mua kèm tên miền ở Namecheap thì giá năm đầu chỉ còn $1.99, ngon, bổ và rẻ. Trước khi đi vào nội dung chính thì mình cũng muốn giải thích thêm một xíu, sở dĩ có bài viết này là vì một số bạn sử dụng VPS mà không có control panel thì việc cài SSL sẽ phải thực hiện hoàn toàn thủ công, hoặc trong thời điểm hiện tại thì VPSSIM (một script quản lý VPS hosting) đã tạm thời không hỗ trợ cài SSL mua ngoài (chỉ hỗ trợ Let’s Encrypt) thì việc bạn mày mò, tìm hiểu và tự cài SSL là một việc nên làm.

Trong bài viết này thì mình sẽ cài đặt SSL cho domain hostkia.com, vì vậy bất cứ khi nào bạn thấy Sơn ghi hostkia.com thì bạn nhớ thay bằng domain của bạn vào nha, kẻo nó lỗi là mình không chịu trách nhiệm đâu à.

Chuẩn bị

Chứng chỉ PositiveSSL, quất một em ở Namecheap như mình đã nói bên trên nhé, trường hợp muốn mua với giá ưu đãi $1.99 cho năm đầu thì cứ thử chat với support xem sao, Sơn đã thử và thành công.

Một web server chạy NGINX, ở đây mình xài VPS ở Vultr chạy CentOS 7 và đã cài script VPSSIM trên đó. Nếu không tự tin thì các bạn nên tạo một VPS mới để thử nghiệm, khi nào thành thạo rồi hẵng áp lên VPS chính, và mình đề nghị các bạn sử dụng một môi trường server giống như mình để không bị phát sinh lỗi ngoài ý muốn.

Tạo server key, tạo file CSR

Đầu tiên mình sẽ tạo một thư mục chứa toàn bộ các file cần thiết cho quy trình cài SSL cho domain hostkia.com, các bạn có thể sử dụng dòng lệnh hoặc dùng FileZilla kết nối tới VPS qua SFTP để thao tác cho tiện cũng được

/etc/nginx/ssl/hostkia.com

Tiếp theo chúng ta sẽ tạo RSA Private Key, việc này bắt buộc phải thực hiện qua dòng lệnh:

openssl genrsa -out /etc/nginx/ssl/hostkia.com/hostkia.com.key 2048

Nếu thấy kết quả trả về như bên dưới là đã tạo thành công Private Key:

[[email protected] ~]# openssl genrsa -out /etc/nginx/ssl/hostkia.com/hostkia.com.key 2048
Generating RSA private key, 2048 bit long modulus
…..+++
……+++
e is 65537 (0x10001)
[[email protected] ~]#

Tạo file .CSR

File .CSR này có nhiệm vụ cung cấp một chuỗi mã hóa giúp nhà cung cấp SSL xác thực được tên miền mà bạn định cài SSL, sau khi xác thực xong họ sẽ trả về một file .crt, và file này mới là thứ cần thiết để kích hoạt SSL cho website của bạn. Bắt đầu rối rồi đó, bạn nên cẩn thận, đọc kỹ và làm từng bước một, chỗ nào không chắc thì nên bấm Ctrl + C để hủy lệnh và làm lại nha. Lưu ý thêm là file .CSR mà bạn sắp tạo chỉ có tác dụng với domain hiện thời, nếu bạn muốn cài SSL cho domain khác thì phải tạo thêm một file .csr mới tương ứng với domain đó. Tương tự, khi bạn chuyển sang VPS hoặc server mới thì việc sinh lại file .csr mới là điều bắt buộc phải làm để xác thực và kích hoạt SSL.

Lệnh tạo CSR như sau:

openssl req -new -key /etc/nginx/ssl/hostkia.com/hostkia.com.key -out /etc/nginx/ssl/hostkia.com/hostkia.com.csr

Đường dẫn đến file /etc/nginx/ssl/hostkia.com/hostkia.com.key thì bạn đã có ở bước trên, còn đường dẫn /etc/nginx/ssl/hostkia.com/hostkia.com.csr chính là nơi mà bạn muốn lưu file CSR sắp tạo ra.

Trên màn hình sẽ hiện ra các yêu cầu nhập thông tin, bạn lần lượt nhập chúng, xong cái nào thì ấn Enter để qua cái tiếp theo, điền sai thì ấn Ctrl + C rồi chạy lại lệnh bên trên để điền lại, không sao cả. Riêng 2 dòng cuối là password và company name thì bạn cứ Enter để bỏ qua, không cần điền.

[[email protected] ~]# openssl req -new -key /etc/nginx/ssl/hostkia.com/hostkia.com.key -out /etc/nginx/ssl/hostkia.com/hostkia.com.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [XX]:VN
State or Province Name (full name) []:Ho Chi Minh city
Locality Name (eg, city) [Default City]:Ho Chi Minh city
Organization Name (eg, company) [Default Company Ltd]:Host Kia
Organizational Unit Name (eg, section) []:WordPress tips and tricks
Common Name (eg, your name or your server’s hostname) []:hostkia.com
Email Address []:[email protected]

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[[email protected] ~]#

Tới đây việc tạo file .CSR đã hoàn tất, bạn cứ yên tâm làm bước tiếp theo nếu như không có thông báo nào hiện ra cả. Giờ bạn hãy đăng nhập vào VPS thông qua FileZilla, lôi file hostkia.com.csr xuống máy của bạn, và mở nó ra, bạn sẽ thấy được một mớ ký tự như hình dưới, yên tâm, bạn không cần hiểu mớ đó đâu, chỉ cần copy lại là được.

cài đặt SSL

Yêu cầu xác thực và kích hoạt SSL

Ở bước này, Sơn sẽ ví dụ với nhà cung cấp Namecheap, nếu bạn mua SSL ở nơi khác thì giao diện thao tác cũng tương tự thôi. Bạn vào phần quản lý SSL của Namecheap, bấm nút ACTIVATE.

cài đặt SSL: bắt đầu quá trình xác thực

Sau đó bạn dán toàn bộ nội dung file .CSR đã copy vào ô trống đầu tiên, chọn Server Type là Apache, Nginx, cPanel or other. Đợi vài giây, nếu ở chỗ Primary Domain hiện ra domain của bạn thì chuẩn rồi đó, click Submit.

cài đặt SSL: gửi SCR cho nhà cung cấp

Bây giờ Namecheap sẽ cho bạn xem lại các thông tin đã điền trong lúc tạo file .CSR, nếu mọi thứ chuẩn hết thì click Next. Kế đó, bạn chọn phương thức xác thực domain là HTTP-based. Khi chọn cái này, Namecheap sẽ gửi cho bạn một file html, bạn upload file ấy lên thư mục gốc của website là được, Namecheap sẽ tiến hành xác thực và cung cấp chứng chỉ SSL qua email cho bạn.

cài đặt SSL

Một bảng thông tin hoành tráng đòi hỏi bạn điền khá nhiều thông tin, thực ra nếu domain bạn mua ở Namecheap luôn thì thông tin sẽ tự động điền, còn domain ở nơi khác thì bạn phải điền bằng tay, hoặc click vào dòng USE ADDRESS BOOK CONTACT để copy nhanh thông tin từ tài khoản Namecheap của bạn, mà thực ra điền có mấy ô à, những ô nào có chữ OPTIONAL ở đằng sau thì không cần điền. Ở cuối trang sẽ có ô điền email, đây chính là nơi là bạn sẽ nhận các file chứng chỉ, vậy nên hãy điền email có thật nha. Click Next.

Kiểm tra lại lần nữa xem domain đã đúng chưa, click Confirm để xác nhận.

Bạn sẽ được dẫn qua một trang mới với cái thông báo nền vàng, đừng hoảng sợ, đây không phải lỗi đâu. Ở chỗ này, bạn hãy click vào dòng “go to Certificate Details page” để lấy file html xác thực hoặc thấy các bản ghi DNS (nếu bạn chọn xác thực qua DNS record).

Bạn click vào mũi tên nhỏ bên cạnh nút EDIT METHODS và chọn Download file, click tiếp nút Download File ở popup hiện ra sau đó, lưu file này ở một nơi dễ tìm.

Giờ đây bạn dùng FileZilla, kết nối tới VPS và upload file này vào thư mục gốc của website bạn cần kích hoạt SSL, với VPS chạy VPSSIM thì thư mục này có đường dẫn là /home/sontranu/public_html/addon-domain/hostkia.com

Up file xong thì bạn quay lại Namecheap, click nút Done 3 lần (click xong một lần sẽ thấy nút khác), rồi ngồi nhâm nhi ly trà đợi chứng chỉ SSL gửi về email. Quá trình này mất tầm 5 phút với xác thực qua DNS hoặc HTTP-based, bạn nào chọn cách xác thực quyền sở hữu domain qua email thì sẽ nhanh hơn.

Sau 5 phút chờ đợi thì bạn sẽ thấy có 2 email tương tự thế này, trong đó có một email gửi kèm file, tất nhiên bạn chỉ cần lấy cái file đính kèm kia thôi nha, cứ lấy về đã rồi tính tiếp.

Email gửi về từ Comodo, báo đã kích hoạt SSL thành công.

 

cài SSL cho NGINX
Email có đính kèm file .crt

Bạn tải file zip kia về, giải nén ra sẽ thu được 2 file tương ứng như hình dưới. Sau đó bạn mở file .crt ra, copy toàn bộ nội dung của file ca-bundle, dán vào bên dưới những nội dung có sẵn trong file .crt, lưu lại và đảm bảo là cuối file không dư khoảng trắng hay dấu ngắt dòng nào cả. Rồi hãy tải chúng lên thư mục /etc/nginx/ssl/hostkia.com

cài SSL cho NGINX
File crt cần thiết để kích hoạt SSL.

Kích hoạt SSL cho NGINX

File cấu hình của domain cần kích hoạt SSL sẽ ở đường dẫn sau /etc/nginx/conf.d/hostkia.com.conf, đầu tiên bạn hãy tải file này về máy của bạn, cất ở đâu đó để backup, phòng khi cấu hình sai thì chỉ cần lấy file backup ra sửa lại là được. Sau khi đã backup xong thì bạn tiến hành mở file hostkia.com.conf trên VPS (nếu dùng FileZilla thì click phải lên file, chọn View/Edit), tiếp đó bạn tìm đến đoạn này:

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

access_log off;
# access_log /home/hostkia.com/logs/access_log;
error_log off;
# error_log /home/hostkia.com/logs/error.log;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection “1; mode=block”;
root /home/sontranu/public_html/addon-domain/hostkia.com;
include /etc/nginx/conf/ddos2.conf;
index index.php index.html index.htm;
server_name hostkia.com;

Thay thế toàn bộ đoạn đó bằng đoạn bên dưới, bạn nào muốn tìm hiểu ý nghĩa các dòng trong file cấu hình này thì có thể Google nhé. Thêm một lưu ý nữa là các bạn nên kiểm tra kỹ đường dẫn các file crt, key cũng như tên domain để tránh phát sinh lỗi. File cấu hình này Sơn đã chuyển hướng toàn bộ traffic từ http sang https cho bạn luôn rồi.

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

listen 443 ssl http2; # Su dung cau hinh nay neu ban dung Nginx tu phien ban 1.9.5 tro len
#listen 443 ssl spdy; #Su dung cau hinh nay neu ban dung Nginx phien ban cu hon 1.9.5
ssl_certificate /etc/nginx/ssl/hostkia.com/hostkia_com.crt;
ssl_certificate_key /etc/nginx/ssl/hostkia.com/hostkia.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!CAMELLIA:!DES-CBC3-SHA;
#ssl_stapling on;
#resolver 8.8.4.4 8.8.8.8 valid=300s;
#resolver_timeout 10s;
ssl_trusted_certificate /etc/nginx/ssl/hostkia.com/hostkia_com.crt;
ssl_buffer_size 1400;
ssl_session_tickets on;
add_header Strict-Transport-Security max-age=31536000;
access_log off;
error_log off;
# error_log /home/hostkia.com/logs/error.log;
root /home/sontranu/public_html/addon-domain/hostkia.com;
include /etc/nginx/conf/ddos2.conf;
index index.php index.html index.htm;
server_name hostkia.com;

Lưu lại file, hoặc chép đè file đã sửa lên server (nếu như bạn sửa file hostkia.com.conf ở máy của bạn).

Khởi động lại dịch vụ NGINX bằng câu lệnh:

service nginx restart

Nếu thấy output có chữ OK là bạn đã làm đúng.

[[email protected] ~]# service nginx restart
Restarting nginx (via systemctl): [ OK ]
[[email protected] ~]#

Nếu không khởi động lại NGINX được thì bạn hãy kiểm tra lại các đường dẫn màu đỏ bên trên xem chuẩn chưa.

Giải quyết tình trạng chữ HTTPS có kèm dấu tam giác màu vàng

Giờ đây thì website của bạn đã có https và hiện icon khóa xanh, nhưng nếu nó bị lỗi với hình tam giác màu vàng thì sao? Điều đó có nghĩa là các tài nguyên trên site của bạn chưa load hoàn toàn qua https, có một vài link ảnh, css hoặc javascript load từ nguồn ngoài, và nguồn đó không có https. Có 2 cách giải quyết:

– Cài plugin Really Simple SSL (WordPress) và kích họat nó lên, mọi tài nguyên load từ http sẽ bị loại bỏ. Cách này hơi cực đoan vì nếu theme của bạn không hỗ trợ SSL từ đầu thì nó sẽ lỗi tùm lum hết.

– Bấm phím F12, chuyển sang tab Console, tìm các tài nguyên không load từ https và tìm cách mang chúng về server của bạn hoặc sửa theo cách nào đó, Sơn sẽ nói ở một bài viết khác.

HostKia chúc các bạn cài SSL thành công trên VPS chạy NGINX nhé, nếu có thắc mắc hay lỗi gì, hãy comment bên dưới để Sơn và các bạn khác tìm cách khắc phục.

About Sơn Trần

Mình là Sơn Trần, mình đã từng học ngành IT và bây giờ vẫn đang theo đuổi niềm đam mê đó. Blog này lập ra để chia sẻ cùng với mọi người những kinh nghiệm của mình về domain, hosting cũng như WordPress.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.