TLS Thực Hiện Bảo Mật Kết Nối HTTPS Như Thế Nào?
Phân tích thực tiễn về TLS handshake, xác thực chứng chỉ và trao đổi khóa làm cho HTTPS thực sự an toàn.
Mọi người nói "HTTPS có nghĩa là nó được mã hóa" rồi dừng lại, nhưng phần thú vị là hai người lạ trên internet thống nhất một bí mật chung như thế nào mà không bao giờ gặp mặt, qua một mạng lưới đầy những người có thể đang nghe lén. Đó là những gì TLS làm, và cơ chế của nó xứng đáng được hiểu nếu bạn làm việc với networking, phát triển web hay bảo mật.
Handshake, từng bước một
Khi trình duyệt của bạn kết nối đến https://example.com, đây là những gì xảy ra (TLS 1.3, mà hầu hết các site hiện sử dụng):
- ClientHello — trình duyệt gửi các cipher suites được hỗ trợ, một nonce ngẫu nhiên, và một dự đoán về key share (sử dụng thứ như X25519 hoặc secp256r1) để trao đổi khóa.
- ServerHello — máy chủ chọn một cipher suite, gửi key share của nó, và trả về chứng chỉ của nó cộng với một chữ ký chứng minh nó nắm giữ khóa riêng tư khớp với chứng chỉ đó.
- Key derivation — cả hai bên bây giờ độc lập tính toán cùng một bí mật chung bằng cách sử dụng toán học kiểu Diffie-Hellman trên các key share của chúng. Không bên nào truyền bí mật; nó được dẫn xuất, không phải gửi.
- Finished messages — cả hai bên xác nhận handshake không bị giả mạo bằng cách gửi một MAC trên toàn bộ handshake transcript.
Sau đó, mọi thứ được mã hóa bằng các khóa đối xứng dẫn xuất từ bí mật chung, thường là AES-128-GCM hoặc ChaCha20-Poly1305. TLS 1.3 đã rút gọn điều này từ handshake hai round-trip của TLS 1.2 thành một round trip hiệu quả, là một lợi thế độ trễ thực sự ở quy mô lớn.
Tại sao chứng chỉ lại quan trọng hơn mã hóa
Mã hóa mà không xác minh danh tính là vô dụng — bất cứ ai cũng có thể thiết lập một kênh được mã hóa, bao gồm kẻ tấn công chạy man-in-the-middle. Chứng chỉ là thứ liên kết một khóa công khai với một tên miền, và nó được ký bởi một Cơ quan Cấp chứng chỉ (CA) như Let's Encrypt hoặc DigiCine.
Trình duyệt của bạn tin tưởng một danh sách cố định các CA gốc được nhúng trong trust store của OS hoặc trình duyệt. Chứng chỉ của máy chủ dây chuyền lên qua các chứng chỉ trung gian đến một trong những gốc đó. Nếu dây chuyền không xác thực, hoặc tên miền trong chứng chỉ không khớp với tên bạn yêu cầu, bạn sẽ nhận được trang cảnh báo đỏ. Mô hình chain-of-trust này là ranh giới bảo mật thực sự — đánh cắp khóa ký của CA và bạn có thể tạo các chứng chỉ hợp lệ cho bất kỳ tên miền nào, đó là lý do tại sao những sự thỏa hiệp CA được coi là các sự cố lớn.
Những gì mã hóa đối xứng vs bất đối xứng đang làm ở đây
Mã hóa bất đối xứng (RSA hoặc elliptic curve) chậm và tốn kém, vì vậy TLS chỉ sử dụng nó trong handshake — để xác thực máy chủ và để giúp thiết lập bí mật chung. Khi điều đó xong, tất cả dữ liệu thực tế (HTML, JSON, bất cứ cái gì) được mã hóa bằng các cipher đối xứng nhanh. Cách tiếp cận kết hợp này là cùng một mô hình bạn sẽ thấy trong SSH, PGP và hầu hết các hệ thống mã hóa thực tế: bất đối xứng cho danh tính và trao đổi khóa, đối xứng cho dữ liệu hàng loạt.
Forward secrecy là một chi tiết liên quan đáng được biết: vì bí mật chung đến từ các ephemeral Diffie-Hellman key share được tạo mới trên mỗi phiên, ngay cả khi ai đó ghi lại lưu lượng của bạn và sau đó đánh cắp khóa riêng tư của máy chủ, họ vẫn không thể giải mã các phiên cũ. Tính chất đó không tồn tại trong trao đổi khóa chỉ RSA cũ hơn.
Kiểm tra nó
Bạn không cần phải tin mù quáng vào một biểu tượng khóa xanh. Chạy:
openssl s_client -connect example.com:443 -tls1_3
Diều đó cho bạn thấy cipher suite được thương lượng, chuỗi chứng chỉ, và liệu handshake có thực sự hoàn thành hay không. Để xem nhanh hơn những gì trình duyệt nhìn thấy, curl -v https://example.com in phiên bản TLS và chi tiết chứng chỉ trước phản hồi HTTP.
Bạn cũng có thể giải mã lưu lượng của riêng mình trong Wireshark nếu bạn xuất biến môi trường SSLKEYLOGFILE trước khi khởi chạy Chrome hoặc Firefox — thực sự hữu ích để gỡ lỗi các vấn đề TLS thay vì đoán.
Nơi điều này thực sự bị hỏng trong thực hành
Hầu hết các lỗi HTTPS thực tế không phải là những vụ phá vỡ mã hóa, chúng là vấn đề hoạt động: chứng chỉ hết hạn, chuỗi trung gian cấu hình sai, máy khách bị mắc kẹt trên các phiên bản TLS cũ, hoặc nội dung hỗn hợp (một trang HTTPS tải một tài nguyên HTTP). Các tấn công cấp độ giao thức thực sự chống lại TLS 1.3 hiện đại là hiếm vì spec đã đóng hầu hết các padding oracle và downgrade trick từng làm phiền SSL 3.0 và TLS sớm. Các điểm yếu bây giờ thường ở các endpoint — một CA bị xâm phạm, một khóa riêng tư bị đánh cắp, hoặc một người dùng nhấp qua một cảnh báo chứng chỉ mà họ không nên làm.
Nếu bạn muốn đi xa hơn, các phân khúc networking và cryptography của Korra Studio bao gồm toán Diffie-Hellman cơ bản và phân tích giao thức cấp độ packet với độ sâu hơn.
Viết với hỗ trợ của AI, được xem xét và đăng bởi Michal Pilch (CISSP), Korra Studio.
Đây là một ghi chép từ cơ sở kiến thức Korra Studio — nền tảng kết hợp mỗi chủ đề với phiên hỗ trợ 1-kèm-1.
Bắt đầu miễn phíarrow_forward