Bài viết mới nhất

Tổng 2300 bài
Web 22/09/2026 6 phút

Chứng chỉ X.509 và chuỗi tin cậy: vì sao trình duyệt tin server — tự dựng CA để hiểu

Cái ổ khóa xanh trên trình duyệt dựa trên một chuỗi tin cậy: cert của site được một CA ký, CA đó lại được CA gốc ký, và trình duyệt chỉ tin sẵn vài CA gốc. Bài này tự dựng một CA rồi ký cert cho web.local bằng openssl, đọc cấu trúc cert (subject, issuer, SAN, hạn), và chứng minh xác thực chuỗi thành công với CA đúng, thất bại với CA sai.

Web 22/09/2026 5 phút

Nginx reverse proxy: một cửa trước nhiều backend — đo round-robin và X-Forwarded

Reverse proxy đứng trước các server, thay mặt chúng trả lời client: cân bằng tải, kết thúc TLS, gom nhiều service sau một tên miền. Bài này dựng nginx proxy tới 3 backend, đo round-robin chia đúng 10/10/10 trên 30 request, và giải thích vì sao thiếu header X-Forwarded-* làm backend thấy sai IP và giao thức của client.

Web 22/09/2026 6 phút

Nginx phục vụ tĩnh và tối ưu hiệu năng: sendfile, cache, và đo bằng ab

Nginx phục vụ file tĩnh nhanh đến mức nào? Bài cuối sê-ri đo thật: sendfile (zero-copy) cho thông lượng ~281 MB/s và 4301 request/giây trên file 68KB, Cache-Control để trình duyệt khỏi tải lại, gzip nén 156 KB xuống 1.2 KB. Kèm một cái bẫy đo lường: ab mặc định HTTP/1.0 nên không nhận gzip — phải đo tỉ lệ nén bằng curl.

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

Nén response API: đo thật gzip và brotli — JSON 21 KB còn 2,2 KB trong 125 µs, brotli-11 tốn 16,85 ms cho thêm 2%, và thân 11 byte nén xong thành 35 byte

Đo nén trên JSON thật từ PostgreSQL, từ 308 byte tới 2,09 MB: gzip-6 đưa 21,2 KB xuống 2,2 KB (10,6%) với 125 µs nén và 26 µs giải. Mức nén gần như không quan trọng với JSON — gzip-1 và gzip-9 chênh 0,3 điểm phần trăm — nhưng brotli-11 tốn 16,85 ms, gấp 135 lần brotli-4, để mua thêm 1 điểm. Hai trường hợp nén làm hại: thân dưới 100 byte phình thêm 24 byte, và JSON chứa ảnh base64 chỉ còn 75% nhưng tốn CPU gấp 17 lần. Kèm thương lượng Accept-Encoding qua HTTP thật, header Vary bắt buộc, và điểm hoà vốn theo băng thông tính từ số đo.

Bảo mật 22/09/2026 5 phút

Hàm băm mật mã: dấu vân tay một chiều của dữ liệu — đo bằng openssl

Hàm băm biến dữ liệu bất kỳ thành một chuỗi cố định như dấu vân tay. Nhưng nhiều người nhầm nó là mã hóa. Bài mở đầu sê-ri mật mã đo thật bốn tính chất bằng openssl: cùng đầu vào cho cùng digest, đổi một ký tự thì digest khác hoàn toàn (chỉ 2/64 ký tự trùng), kích thước luôn cố định, và vì sao MD5 đã vỡ còn SHA-256 thì chưa.

Bảo mật 22/09/2026 5 phút

Vì sao KHÔNG lưu mật khẩu bằng SHA trần: salt, hàm cố ý chậm — đo thật

SHA-256 rất tốt để kiểm toàn vẹn, nhưng dùng nó lưu mật khẩu là sai lầm nguy hiểm — vì nó quá nhanh. Bài này đo thật: SHA-256 chạy 2,3 triệu hash/giây (kẻ bẻ khóa mơ ước), còn PBKDF2 cố ý chậm chỉ 10/giây — chậm hơn 231.000 lần mà người đăng nhập không hề thấy. Cùng salt để rainbow table vô dụng.