Hướng dẫn này mô tả quy trình triển khai Perfect Forward Secrecy với máy chủ web NGINX trên các hệ thống Debian và Ubuntu. Quy trình này có thể dễ dàng được điều chỉnh cho các hệ thống GNU/Linux khác.
Tóm lại, Perfect Forward Secrecy đảm bảo: "... rằng việc xâm phạm một thông điệp không thể dẫn đến việc xâm phạm các thông điệp khác, và cũng không có một giá trị bí mật nào có thể dẫn đến việc xâm phạm nhiều thông điệp." Để biết thêm thông tin, hãy xem http://en.wikipedia.org/wiki/Forward_secrecy#Perfect_forward_secrecy.
Khi lỗ hổng Heartbleed trong OpenSSL được tiết lộ vào đầu năm 2014, thì ngày càng rõ ràng rằng PFS là điều bắt buộc đối với bất kỳ hệ thống nào sử dụng SSL/TLS ở mức độ nghiêm túc.
Nếu bạn muốn so sánh kết quả của mình với kết quả của tôi, bạn có thể kiểm tra triển khai tham chiếu của tôi tại https://www.ssllabs.com/ssltest/analyze.html?d=indietorrent.org, và chuỗi chứng chỉ SSL và tiêu đề NGINX được gửi có thể được xem xét tại https://indietorrent.org.
Không cần phải nói thêm nữa, chúng ta hãy cấu hình NGINX để triển khai PFS.
Chúng ta hãy chuyển đến thư mục cấu hình của NGINX:
Chúng ta cần tạo các tham số Diffie-Hellman đủ mạnh. Một số người cho rằng 4096 bit là quá mức cần thiết và sẽ gây gánh nặng không đáng có cho CPU của hệ thống, nhưng với sức mạnh tính toán hiện đại, đây có vẻ là một sự thỏa hiệp đáng giá. Để biết thêm thông tin, hãy xem phần Tài liệu tham khảo bên dưới.
Thật tiện lợi khi có tệp cấu hình này, dành riêng cho tác vụ đang thực hiện, được phân loại trong một tệp include; điều này giúp việc triển khai PFS trên nhiều hệ thống trở nên đơn giản hơn.
Dán nội dung sau vào tệp trên:
Sửa đổi cấu hình NGINX để bao gồm tệp trên bằng cách chèn dòng sau vào tệp cấu hình chính của NGINX (theo mặc định,
Khởi động lại NGINX để các thay đổi có hiệu lực:
Nếu thử nghiệm tại https://www.ssllabs.com/ssltest/analyze.html hiển thị Tiếp tục phiên (lưu trữ đệm) Không (ID đã chỉ định nhưng không được chấp nhận) bằng màu đỏ và máy chủ triển khai SNI, hãy thêm nội dung sau vào khối
Khởi động lại NGINX một lần nữa để thực hiện các thay đổi có hiệu lực:
Bài kiểm tra trên sẽ không còn báo cáo sự cố này nữa (mặc dù sự cố không làm giảm điểm kiểm tra tổng thể).
Chỉ cần thêm các dòng sau vào cuối
Tải lại (thay vì khởi động lại) sẽ đủ để buộc NGINX chọn các mục cụ thể này thay đổi:
Bạn có thể xác nhận HSTS đang hoạt động như mong đợi bằng cách kiểm tra triển khai của mình tại https://www.ssllabs.com/ssltest/analyze.html. Nếu HSTS được triển khai đúng, bạn sẽ thấy một hộp màu xanh lá cây ngay bên dưới điểm của mình, ghi rằng "Máy chủ này hỗ trợ HTTP Strict Transport Security với thời gian dài. Điểm được đặt thành A+."
Tóm lại, Perfect Forward Secrecy đảm bảo: "... rằng việc xâm phạm một thông điệp không thể dẫn đến việc xâm phạm các thông điệp khác, và cũng không có một giá trị bí mật nào có thể dẫn đến việc xâm phạm nhiều thông điệp." Để biết thêm thông tin, hãy xem http://en.wikipedia.org/wiki/Forward_secrecy#Perfect_forward_secrecy.
Khi lỗ hổng Heartbleed trong OpenSSL được tiết lộ vào đầu năm 2014, thì ngày càng rõ ràng rằng PFS là điều bắt buộc đối với bất kỳ hệ thống nào sử dụng SSL/TLS ở mức độ nghiêm túc.
Nếu bạn muốn so sánh kết quả của mình với kết quả của tôi, bạn có thể kiểm tra triển khai tham chiếu của tôi tại https://www.ssllabs.com/ssltest/analyze.html?d=indietorrent.org, và chuỗi chứng chỉ SSL và tiêu đề NGINX được gửi có thể được xem xét tại https://indietorrent.org.
Không cần phải nói thêm nữa, chúng ta hãy cấu hình NGINX để triển khai PFS.
Chúng ta hãy chuyển đến thư mục cấu hình của NGINX:
Mã:
cd /etc/nginx/
Mã:
openssl dhparam -out dh4096.pem 4096
Mã:
vi /etc/nginx/perfect-forward-secrecy.conf
Mã:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !MEDIUM";
ssl_dhparam dh4096.pem;
/etc/nginx/nginx.conf
), ở cuối (và bên trong) http {}
khối:
Mã:
# See: https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-secrecy
# This MUST come AFTER the lines that includes .../sites-enabled/*, otherwise SSLv3 support may be re-enabled accidentally.
include perfect-forward-secrecy.conf;
Mã:
service nginx restart
http {}
cấp cao nhất (tức là thêm vào nginx.conf
, ngay bên dưới nơi chúng tôi đã thực hiện các bổ sung trước đó):
Mã:
# See: http://forum.nginx.org/read.php?2,152294,152401#msg-152401
ssl_session_cache shared:SSL:10m;
Mã:
service nginx restart
Tiến xa hơn: Triển khai Bảo mật truyền tải nghiêm ngặt HTTP (HSTS) với thời lượng dài
Đây là một bài kiểm tra dễ dàng và rất đáng thực hiện, với điều kiện là:- Bạn muốn buộc SSL cho tất cả các tài nguyên của bất kỳ máy chủ nào mà tiêu đề này được đặt (tức là mọi trang trên trang web đang đề cập).
- Bạn có thể sống mà không có khả năng chấp nhận và bỏ qua các cảnh báo SSL cho bất kỳ tài nguyên nào được yêu cầu từ bất kỳ máy chủ nào mà tiêu đề này được đặt, chẳng hạn như "Tên miền không khớp", v.v. Bản chất của HSTS là các điều kiện cảnh báo và lỗi liên quan đến chứng chỉ SSL không thể bị ghi đè.
Chỉ cần thêm các dòng sau vào cuối
/etc/nginx/perfect-forward-secrecy.conf
và lưu các thay đổi:
Mã:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
# This will prevent certain click-jacking attacks, but will prevent
# other sites from framing your site, so delete or modify as necessary!
add_header X-Frame-Options SAMEORIGIN;
Mã:
service nginx reload