ducdev
Bảo mật / Bài viết

HTTPS Và TLS — Cách Hoạt Động Thực Sự Đằng Sau Ổ Khóa Xanh

Bạn biết HTTPS là "an toàn" nhưng bạn có biết TLS handshake diễn ra như thế nào? Asymmetric và symmetric encryption hoạt động ra sao? Tại sao certificate lại quan trọng?

a
admin
31/08/2025 · 3 phút đọc · 0 lượt xem
Chia sẻ

Chiếc ổ khóa xanh trên browser là thứ người dùng nhìn thấy. Nhưng đằng sau đó là một chuỗi cryptographic operations phức tạp xảy ra trong vài milliseconds mỗi khi bạn mở một trang web.

HTTP Vs HTTPS — Vấn Đề Là Gì?

HTTP truyền data dưới dạng plain text. Bất kỳ ai "nghe" được traffic trên mạng đều đọc được:

# HTTP request — ai cũng đọc được nếu MITM
GET /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

username=duc&password=MyP@ssw0rd  ← Lộ hoàn toàn!

HTTPS mã hóa toàn bộ request/response — kể cả URL, headers, và body.

TLS Handshake — Từng Bước

Khi browser kết nối https://example.com:

  1. Client Hello: Browser gửi danh sách cipher suites hỗ trợ và random number
  2. Server Hello: Server chọn cipher suite, gửi certificate và random number
  3. Certificate Verify: Browser verify certificate với Certificate Authority
  4. Key Exchange: Hai bên thống nhất session key (qua ECDHE)
  5. Finished: Cả hai confirm, bắt đầu encrypt với symmetric key

Asymmetric Vs Symmetric Encryption

TLS dùng cả hai:

  • Asymmetric (RSA/ECC): Dùng để trao đổi key an toàn. Chậm, không dùng để encrypt data thực.
  • Symmetric (AES): Dùng để encrypt toàn bộ session sau khi đã có shared key. Nhanh hơn 100x.
# Minh họa đơn giản
# Asymmetric — key exchange
private_key, public_key = generate_rsa_keypair()
# Server publish public_key
# Client encrypt session_key với public_key
# Chỉ server (có private_key) mới decrypt được

# Sau khi có shared session_key — symmetric
encrypted_data = AES_GCM.encrypt(session_key, plaintext)
decrypted_data = AES_GCM.decrypt(session_key, encrypted_data)

Certificate Chain — Tại Sao Tin Tưởng?

example.com certificate
  └─ signed by: Let's Encrypt Intermediate CA
       └─ signed by: ISRG Root X1 (Root CA)
            └─ trusted by: OS/Browser

Browser tin tưởng một danh sách Root CAs được cài sẵn trong OS. Certificate của website phải có chain đến một trong các Root CA đó.

Let's Encrypt — SSL Miễn Phí

# Cài certbot và lấy certificate tự động
apt install certbot python3-certbot-nginx
certbot --nginx -d yourdomain.com

# Tự động renew (certificate có hạn 90 ngày)
certbot renew --dry-run  # Test
# Certbot tự thêm cron job để renew

HSTS — Bắt Buộc HTTPS

# Nginx header — bảo browser luôn dùng HTTPS
add_header Strict-Transport-Security
  "max-age=31536000; includeSubDomains; preload" always;

# Django
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_SSL_REDIRECT = True

Kiểm Tra TLS Configuration

# Kiểm tra certificate
openssl s_client -connect yourdomain.com:443 -brief

# Check grade với SSL Labs
# Truy cập: https://ssllabs.com/ssltest/
TLS 1.3 (2018) đơn giản hóa handshake xuống còn 1 round trip thay vì 2 của TLS 1.2, giảm latency đáng kể. Nếu server của bạn vẫn dùng TLS 1.0/1.1, hãy disable ngay.

Kết Luận

HTTPS không chỉ là checkbox "an toàn" — nó là nền tảng của mọi web app hiện đại. Let's Encrypt đã làm cho SSL certificate miễn phí và tự động, không còn lý do gì để chạy HTTP. Bước tiếp theo: tìm hiểu Certificate Transparency và OCSP stapling.

#HTTPS #TLS #bao mat #Network #Web
a
Tác giả
admin

Lập trình viên, yêu thích chia sẻ kiến thức về công nghệ và phát triển phần mềm.

Bình luận

Chưa có bình luận. Hãy là người đầu tiên!

Để lại bình luận

Bình luận sẽ được duyệt trước khi hiển thị.