Thứ Bảy, 3 tháng 10, 2015

Cài đặt SSL và giao thức HTTP/2 cho NGINX trên CentOS 7 test test

Bài vi?t này thu?c tác gi? Công H?i c?a Vietstar. Net g?i đ?n đ?c gi? thachpham.com.

Trong tháng 2 v?a qua, m?t ki?u giao th?c web m?i v?a đư?c IESG ch?p thu?n mang nhi?u tính năng vư?t tr?i hơn, giúp website t?i ưu t?c đ? hơn đó là giao th?c HTTP/2. V?y th? HTTP/2 là g?, nó có nh?ng ưu đi?m nào th? trong bài này, tác gi? Công H?i t?i VietStart. Net s? gi?i thi?u và hư?ng d?n các đ?c gi? t?i thachpham.com cách cài đ?t nó vào máy ch? Linux s? d?ng CentOS 7.

HTTP (Hypertext Transfer Protocol) là m?t giao th?c truy?n chu?n v? m?ng (truy?n t?i siêu văn b?n – nói nôm na là giao th?c web). HTTP 1.1 ra đ?i vào năm 1997 và v?n đư?c s? d?ng đ?n hi?n t?i mà chưa h? có m?t nâng c?p nào. Có l? đ? quá c? nên vào 12/2014 nhóm phát tri?n c?a Hypertext Transfer Protocol đ? đ? xu?t lên IESG xem HTTP/2 như là m?t tiêu chu?n m?i. Và đ? đư?c IESG ch?p thu?n vào ngày 17/02/2015.

HTTP 2 phát tri?n d?a trên SPDY (pronounced speedy) m?t giao th?c m?ng m? đư?c phát tri?n b?i Google.

Có th? b?n c?n:

S? khác bi?t th? r?t nhi?u nhưng m?nh tóm l?i s? khác bi?t l?n nh?t gi?a 2 giao th?c là: HTTP2 h? tr? các truy v?n ghép, nén n?i dung, ưu tiên và qu?n l? thông minh hơn các lu?ng d? li?u. Đi?u đó gây ra vi?c gi?m đ? tr? và tăng t?c t?i n?i dung web.

HTTPS (Hypertext Transfer Protocol Secure) là m?t s? k?t h?p gi?a giao th?c HTTP và giao th?c b?o m?t SSL hay TLS cho phép trao đ?i thông tin m?t cách b?o m?t trên Internet.

Hi?n có r?t nhi?u bài hư?ng d?n cài đ?t SSL nhưng th?t s? r?t ít bài làm đúng. Ngay c? tinhte.vn c?ng chưa th?c s? cài đúng.

Các b?n có th? test SSL c?a website t?i: https://www.ssllabs.com/ssltest/index.html

K?t qu? test c?a tinhte.vn.

ssl-report-tinhte

K?t qu? test c?a vietstar.net.

ssl-report-vietstar

Nên hôm nay, m?nh s? hư?ng d?n b?n cài đ?t và c?u h?nh HTTPS v?i HTTP2 lên chu?n A+.

Ngày 22/09/2015 v?a r?i NGINX đ? ra phiên b?n mainline 1.9.5 chính th?c h? tr? HTTP 2, và t? này chính th?c say goodbye SDPY m?t th?i hùng h?u. Như v?y, đi?u này có ngh?a là b?n ch? có th? s? d?ng HTTP 2 trên NGINX phiên b?n 1.9.5 tr? lên, n?u b?n đang dùng NGINX th? h?y g? nginx -v đ? ki?m tra phiên b?n NGINX hi?n t?i c?a b?n.

N?u b?n đang dùng Centminmod, th? t? phiên b?n Centmin Mod 1.2.3-eva2000.09 beta đ? h? tr? NGINX 1.9.5.

Đ? cài NGINX 1.9.5, b?n c?n n?p package vào. H?y t?o file /etc/yum.repos.d/nginx.repo và chèn đo?n dư?i đây vào ho?c n?u có r?i th? s?a n?i dung:

[nginx]name=nginx repobaseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/gpgcheck=0enabled=1

Sau đó c?p nh?t l?i gói yum.

yum update -y

Và cài NGINX vào v?i l?nh sau:

yum install nginx

Sau khi cài đ?t b?n ki?m tra l?i có ph?i là version 1.9.5 và có module http 2 (--with-http_v2_module) b?ng l?nh sau:

nginx -V

Sau khi cài đ?t xong, h?y thi?t l?p NGINX s? d?ng HTTP 2 b?ng cách m? t?p tin c?u h?nh NGINX c?a b?n t?i /etc/nginx/conf.d và đ?i ph?n listen 80 thành th? này:

server { listen 443 ssl http2; server_name domain.com www.domain.com; .}

Và b?n h?y t?o ch?ng ch? SSL, sau đó upload lên server gi?ng như bài này (tr? bư?c s? 5 chúng ta s? s?a l?i 1 xíu ? bên dư?i)

Thi?t l?p ch?ng th?c vùng nh? (Session cache)

Đi?u này là khá quan tr?ng v? khi truy c?p giao th?c SSL th? l?n đ?u s? x? l? r?t n?ng và nhi?u (Nên khi truy c?p vào trang web https l?n đ?u tiên thư?ng lâu hơn so v?i l?n sau). Thi?t l?p này s? giúp NGINX nh? session c?a user và  không c?n ch?ng th?c cho request k? ti?p.

ssl_session_cache shared:SSL:20m;ssl_session_timeout 180m;

? ngh?a d?ng 1 là t?o vùng nh? 20MB cho ch?ng th?c SSL. Theo tài li?u c?a NGINX th? 1MB ch? 4000 session. V?y 20MB tương đương v?i 80.000 Session (b?n có th? đi?u ch?nh cho phù h?p v?i nhu c?u server b?n).

D?ng th? 2 là lưu nó trong 180 phút (3 ti?ng) con s? này phù h?p v?i kho?ng th?i gian User truy c?p website b?n. N?u website b?n c?n b?o m?t hơn th? có th? gi?m con s? này xu?ng nhưng KHÔNG NÊN gi?m dư?i 10 phút.

Vô hi?u hóa SSL

Có th? là b?n nói tôi khùng, đang setup SSL gi? là vô hi?u hóa nó.

Nói v?y thôi, ch? th?c ra là thay th? SSL (Secure Sockets Layer) b?ng TLS (Transport Layer Security). V? th?c t? là SSL c?n nhi?u đi?m y?u hơn là TLS. Tuy nhiên IE6 không h? tr? TLS (nhưng ch?c là IE6 đ? quá c? r?i, t?m c?ng ch?ng c?n đâu).

Thêm d?ng sau ti?p theo 2 d?ng trên:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

T?i ưu hóa Cipher Suites (B? m? hóa)

Trung tâm x? l?, m? hóa, gi?i m? c?a SSL/TLS là ch? này (t?m hi?u v?y v? m?nh không phân tích sâu vào cơ ch? ho?t đ?ng c?a nó).

Khai báo NGINX b?t b? m? hóa:

ssl_prefer_server_ciphers on;

Khai bao danh sách các cơ ch? m? hóa đư?c ch?p nh?n:

ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5

T?o ra các thông s? DHParam

T?o file DH (Diffie-Hellman) v?i 2048 bit (đ? ch?t cho nh?ng th?ng mu?n hack):

openssl dhparam 2048 -out /etc/nginx/cert/dhparam.pem

Sau đó thêm vào config d?ng sau:

ssl_dhparam /etc/nginx/cert/dhparam.pem;

@Lưu ?: N?u client c?a b?n dùng JAVA 6 tr? xu?ng th? nên dùng 1024 bit thôi nhé ??

Kích ho?t OCSP

OCSP (Online Certificate Status Protocol) đư?c hi?u như là ki?m tra ch?ng th?c c?a b?n v?i nhà cùng c?p SSL (theo bài t?o ch?ng ch? SSL đây là COMODO). T?o ra file Khai báo v?i NGINX c?a b?n đây là gi?y th?c b?ng cách s? d?ng l?nh sau:

cat AddTrustExternalCARoot.crt PositiveSSLCA2.crt > trustchain.crt

File AddTrustExternalCARoot.crt là file g?c, file PositiveSSLCA2.crt là file ch?ng th?c trung gian có kèm theo trong file zip khi b?n mua SSL ho?c download c?a COMODO t?i đây.

Ti?p theo là c?u h?nh NGINX stapling

ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/nginx/cert/trustchain.crt; resolver 8.8.8.8 8.8.4.4;

? đây là m?nh dùng qua DNS Google, b?n có th? dùng DNS nào khác mà b?n tin tư?ng ho?c nhanh hơn.

C?u h?nh Strict Transport Security

Sau khi server đ? ch?ng th?c xong th? tr? v? tr?nh duy?t th?i gian ch?ng th?c đư?c ch?p nh?n, trong th?i gian này khi request tr?nh duy?t không c?n g?i ch?ng th?c v?i Server n?a (Dó là l? do t?i sao ch? n?ng lúc đ?u).

Thêm d?ng sau vào config file:

add_header Strict-Transport-Security "max-age=31536000" always;

Trong trư?ng h?p ch?ng th?c này đư?c dùng cho nhi?u subdomain th? s?a l?i như sau:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

That All, ch? th? thôi. B?n save l?i file và restart NGINX và có th? ki?m tra xem SSL c?a b?n đư?c lo?i g? r?i nào?

Sau khi c?u h?nh xong b?n s? có file c?u h?nh NGINX c?a domain như th? này đây:

server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name your_domain.com; ssl_certificate /etc/nginx/cert/your_key.certchain.crt; ssl_certificate_key /etc/nginx/cert/your_key.key; ssl_session_cache shared:SSL:20m; ssl_session_timeout 60m; ssl_prefer_server_ciphers on; ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5; ssl_dhparam /etc/nginx/cert/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/nginx/cert/trustchain.crt; resolver 8.8.8.8 8.8.4.4; add_header Strict-Transport-Security "max-age=31536000" always; #add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # C?u h?nh c?a b?n ? dư?i này …}

Sau đó b?n có th? ki?m tra server đ? dùng HTTP 2 chưa b?ng cách cài plugin HTTP/2 and SPDY indicator c?a Chrome.

http2-enabled

Th? thôi, r?t đơn gi?n ph?i không nào? Nh?n chung cách cài đ?t SSL và b?t HTTP/2 c?ng khá đơn gi?n, nó c?ng gi?ng như m?nh kích ho?t SPDY mà thôi nhưng ch? khác là thay spdy thành http2 trong ph?n listen c?a t?p tin c?u h?nh mà thôi. Nhưng ngoài vi?c đó, trong bài này b?n c?ng đ? bi?t thêm m?t vài k? thu?t quan tr?ng đ? c?u h?nh SSL an toàn hơn đ? đ?t chu?n A+ t?i SSLLabs.

Chúc các b?n làm thành công và đ?ng quên vào hoidap.thachpham.com n?u b?n c?n h? tr?.

.

Không có nhận xét nào:

Đăng nhận xét