Web 22/09/2026 5 phút

TLS handshake từng bước: xem tận mắt bằng openssl s_client

Trước khi một byte HTTPS chạy, client và server làm một cuộc bắt tay TLS: thỏa thuận phiên bản, chọn cipher, trao khóa tạm, và server chứng minh danh tính bằng chứng chỉ. Bài này dùng openssl s_client -msg để xem từng handshake message thật của TLS 1.3 (ClientHello, ServerHello, Certificate, Finished), so TLS 1.3 với 1.2, và đọc chuỗi chứng chỉ.

Lập trình 22/09/2026 6 phút

TLS handshake: cái giá thật của HTTPS đo được, và session resumption cắt nó ra sao

HTTPS an toàn nhưng không miễn phí: sau bắt tay TCP, TLS thêm một bắt tay riêng tốn CPU (toán khóa công khai) và một RTT. Bài này chạy thật trong Go với self-signed cert: TLS full handshake tốn 391µs so với TCP thường 23µs — thêm ~368µs, phần lớn là CPU. Session resumption (500/500 kết nối resumed) bỏ phần đắt; giải thích vì sao trên localhost nó chỉ nhanh 1,1 lần còn trên mạng thực tiết kiệm cả một RTT.

Lập trình 22/09/2026 6 phút

TLS/HTTPS: InsecureSkipVerify biến HTTPS thành vô dụng — mã hoá mà không xác thực là vô nghĩa

HTTPS làm hai việc: mã hoá dữ liệu VÀ xác thực bạn đang nói chuyện với đúng server. Tắt phần xác thực (InsecureSkipVerify) giữ lại mã hoá nhưng vứt bỏ sự an toàn. Bài này tái hiện thật trong Go: client mặc định từ chối cert tự ký với lỗi x509, nhưng InsecureSkipVerify=true chấp nhận bất kỳ cert nào — mở cửa cho kẻ người-đứng-giữa. Cách đúng khi cần tin cert riêng là thêm vào RootCAs, không bao giờ tắt verify.

Bảo mật ứng dụng web 02/09/2026 9 phút

Bắt tay TLS tốn chưa tới 1 ms và chỉ trả một lần — nên 'TLS chậm' là cớ; cái thật sự nguy là dòng CERT_NONE viết lúc dev rồi theo bài lên production

Cùng một chữ HTTPS trên thanh địa chỉ có thể là TLS 1.3 cipher 256-bit, cũng có thể là máy chủ vẫn nhận TLS 1.0 và chứng chỉ chẳng ai ký. Tôi đo thời gian bắt tay (dưới 1 ms, trả một lần), thử ép giao thức cũ (bị từ chối), và chứng minh vì sao tắt kiểm chứng chỉ là vứt bỏ chống MITM — mã hoá mà không xác minh danh tính là khoá cửa rồi đưa chìa cho người lạ.