Cài đặt https dùng SSL cho localhost trong 5 phút

Submitted by superthin on 04/04/2020 - 09:41:32
https ssl cover

Trong quá trình phát triển web, sẽ thật điên đầu khi trên production hosting - hosting bật an toàn SSL/TLS tức là trang web thay vì bắt đầu bằng http, sẽ bắt đầu bằng https, nhưng khi phát triển lại chỉ có http. Mỗi lần đưa mã nguồn lên lại loay hoay với việc chỉnh chọc cấu hình. Một lần quên, lơ đãng gì đó có khi mọi thứ lại không hoạt động, loay hoay mãi mới phát hiện ra hóa ra chỉ vì http vs https. Bài này giải quyết điều đó.

Môi trường phát triển localhost dev cũng nên bật SSL (dùng https) cho dễ dàng

Đúng thế, đâu có khó gì việc này mà không làm. Mặc dù về mặt lý thuyết, khi dùng SSL tốc độ có chậm hơn đôi chút, nhưng với con số vài trăm mili giây thì hẳn bạn sẽ chẳng thể cảm nhận được gì. Hơn nữa, khi phát triển, tốc độ ở mạng nội bộ hoặc ngay trên máy bạn ngồi, gần như không cảm nhận được cái gọi là nhanh - chậm khi ít hơn 1 giây.

Do đó, cứ bật SSL cho chắc ăn, có phải không nhỉ?

Bắt tay thực hành việc cài SSL cho localhost của bạn ngay

Bài này hướng dẫn khi môi trường dev của bạn chạy với hệ điều hành Ubuntu hoặc Debian, web server sử dụng nginx. Nếu bạn sử dụng server khác, web server không dùng nginx cũng cứ xem qua đoạn dưới, chỉnh cho phù hợp với server của bạn. Nhớ gõ lệnh trên cái máy tính mà bạn dùng làm server, không phải ngay trên máy bạn ngồi nhé, trừ trường hợp máy bạn đang ngồi cũng là web server phát triển của bạn.

Gõ lệnh sau tại terminal:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Xuất hiện cửa sổ như hình:

Cửa sổ gõ lệnh Terminal
Gõ lệnh tại terminal của linux server của bạn

Cung cấp các thông tin tương ứng với Việt Nam chúng ta như sau:


Country Name (2 letter code) [AU]:VI
State or Province Name (full name) [Some-State]:Ho Chi Minh
Locality Name (eg, city) []:Ho Chi Minh City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:SuperthinLabs.com
Organizational Unit Name (eg, section) []:R and D
Common Name (e.g. server FQDN or YOUR name) []:127.0.0.1
Email Address []:[email protected]

Kiểm tra lại bằng lệnh:

ls /etc/ssl/certs/nginx-selfsigned.crt

để chắc rằng đã tạo được khóa tự ký.

Tiếp tục, gõ lệnh:

sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096

để tạo nhóm Diffie-Hellman giúp cho việc bắt tay với client được tốt hơn. Bạn phải đợi có khi đến gần 3 phút để có kết quả. Kiểm tra lại bằng lệnh:

ls /etc/nginx/dhparam.pem

cho chắc ăn nhé. Tiếp tục với câu lệnh:

sudo nano /etc/nginx/snippets/self-signed.conf

có nội dung file:

ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

nhớ bấm Ctrl +O để save lại, Ctrl + X thoát, lúc này cấu hình cho nginx biết rằng ta sẽ có thêm SSL cho nó. Tiếp tục với câu lệnh:

sudo nano /etc/nginx/snippets/ssl-params.conf

có nội dung:


ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1;
ssl_session_timeout  10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

mục đích là để cung cấp cho nginx biết các thông số cần thiết. Tới đây, bạn có thể cấu hình cho các virtual host của bạn trong nginx tương tự như đoạn sau:


server {
    listen 443 ssl;
    listen [::]:443 ssl;
    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;

    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm index.nginx-debian.html;

    . . .
}

Nhớ restart lại nginx để mọi thứ có tác dụng, giờ bạn có thể gõ https://localhost/ để kiểm tra, nếu xuất hiện warning, cứ phớt lờ và sử dụng, đừng đòi hỏi có ổ khóa màu xanh lá cây vì ở đây chỉ ký dạng tự ký. Mục đích của ta là có thể sử dụng được https trong môi trường phát triển thay vì chỉ http.

Khi truy cập từ trình duyệt, nó sẽ hiện lên đỏ lòm:

Thông báo Google Chrome
Khi trình duyệt Chrome thông báo. Click như hình vào và process...

Bài viết đến đây là kết thúc rồi./.