Khắc phục lỗi HTTP2 không hỗ trợ trên trình duyệt web phiên bản cũ

Nguyễn Thành Luân 4 phút đọc

Mở đầu

Trong bài viết trước tôi đã trình bày tổng quan về giao thức HTTP2. Trong bài viết này tôi xin chia sẻ cách xủ lý vấn đề khi website đang chạy với giao thức HTTP2 nhưng một số trình duyệt phiên bản cũ hơn không hỗ trợ. Bạn có thể kiểm tra phiên bản của trình duyệt theo bảng bên dưới

Tổng quan về giao thức HTTP2

Nguyên nhân dẫn đến lỗi này do NGINX đã loại bỏ bộ mật mã(ciphers) cũ không an toàn, ta cần phải thêm bộ ciphers này trong file cấu hình SSL của NGINX

Cấu hình

Ở bài viết này tôi sẽ sử dụng

Browser:
Chorme 49/ Windows XP
Firefox 47 / Windows 7

NGINX

Kết nối đến server thông qua SSH với quyền root, thực hiện điều chỉnh file /etc/nginx/conf.d/ssl.conf

nano /etc/nginx/conf.d/ssl.conf

Thêm dòng

ssl_ciphers '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:TLS-RSA-WITH-RC4-128-MD5:TLS-RSA-WITH-RC4-128-SHA:TLS-RSA-WITH-3DES-EDE-CBC-SHA:TLS-RSA-WITH-DES-CBC-SHA:TLS-RSA-EXPORT1024-WITH-RC4-56-SHA:TLS-RSA-EXPORT1024-WITH-DES-CBC-SHA:TLS-RSA-EXPORT-WITH-RC4-40-MD5:TLS-RSA-EXPORT-WITH-RC2-CBC-40-MD5:TLS-DHE-DSS-WITH-3DES-EDE-CBC-SHA:TLS-RSA-WITH-AES-128-GCM-SHA256:AES-128-GMC:ECDHE-RSA:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

ssl_prefer_server_ciphers on;

Lưu file và khởi động lại NGINX

service nginx restart
Plesk Linux

Kết nối đến server thông qua SSH với quyền root, thực hiện điều chỉnh file nano /etc/sw-cp-server/conf.d/ssl.conf

nano /etc/sw-cp-server/conf.d/ssl.conf

Thêm dòng

ssl_ciphers '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:TLS-RSA-WITH-RC4-128-MD5:TLS-RSA-WITH-RC4-128-SHA:TLS-RSA-WITH-3DES-EDE-CBC-SHA:TLS-RSA-WITH-DES-CBC-SHA:TLS-RSA-EXPORT1024-WITH-RC4-56-SHA:TLS-RSA-EXPORT1024-WITH-DES-CBC-SHA:TLS-RSA-EXPORT-WITH-RC4-40-MD5:TLS-RSA-EXPORT-WITH-RC2-CBC-40-MD5:TLS-DHE-DSS-WITH-3DES-EDE-CBC-SHA:TLS-RSA-WITH-AES-128-GCM-SHA256:AES-128-GMC:ECDHE-RSA:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

ssl_prefer_server_ciphers on;

Lưu file và khởi động lại

service sw-cp-server restart

Sau khi hoàn tất bạn có thể mở trình duyệt và kiểm tra lại hoặc sử dụng link bên dưới để kiểm tra

https://www.ssllabs.com/ssltest/analyze.html

Kết luận

HTTP / 2 có một danh sách đen lớn về mật mã cũ và không an toàn, vì vậy chúng ta phải tránh chúng. Bộ mã hóa là một loạt các thuật toán mã hóa, mô tả cách mã hóa dữ liệu.

Tôi khuyên bạn tốt nhất nâng cấp hệ điều hành và trình duyệt web, để phòng tránh những rủi ro về bảo mật.