SSL/TLS là gì? | HTTPS và biểu tượng ổ khóa trên trình duyệt

(Cập nhật: 19 tháng 7, 2026 ) SSL TLS HTTPS ổ khóa chứng chỉ bảo mật web frontend
Kết luận

SSL/TLS là lớp mã hóa dưới HTTPS; ổ khóa trên trình duyệt nghĩa là kênh tới đúng hostname đang được mã hóa và chứng chỉ hợp lệ — không phải tem “website sạch”. Frontend và freelancer Việt Nam cần đọc được cảnh báo (hết hạn, tên không khớp, mixed content) trước khi đổ lỗi “hosting hỏng”. Spot-check nhanh: SSL Check → báo cáo Qualys SSL Labs.

Sinh viên và junior frontend hay được bảo: “Bật HTTPS đi”, rồi nhìn ổ khóa xanh/xám mà không biết nó đảm bảo gìkhông đảm bảo gì. Khi Chrome đỏ “Your connection is not private”, ticket nhảy vào Zalo nhóm outsourcing — ai cũng đoán: DNS? Cloudflare? certbot? Trong khi nguyên nhân có thể chỉ là cert self-signed trên staging hoặc ảnh logo vẫn http://.

Bài này giải thích SSL/TLS là gì, HTTPS và padlock theo góc nhìn người làm web (không phải khóa học crypto), kèm bảng lỗi thường gặp và cách kiểm tra thực tế.

Bài viết này giúp bạn

  • Phân biệt SSL, TLS, HTTPS, chứng chỉ số
  • Hiểu ổ khóa trình duyệt nói lên điều gì
  • Đọc được cảnh báo: hết hạn, hostname, mixed content, self-signed
  • Biết khi nào dùng padlock / openssl / SSL Check → SSL Labs
  • Checklist trước khi demo cho khách hoặc bàn giao

SSL, TLS, HTTPS — ba lớp từ ngữ

SSL và TLS

SSL (Secure Sockets Layer) là thế hệ giao thức cũ. TLS (Transport Layer Security) là phiên bản kế thừa đang dùng trên internet.

Trong chat và brochure hosting, người ta vẫn nói “cài SSL”. Về kỹ thuật năm 2026:

Tên người hay nóiThực tế
”SSL certificate”Chứng chỉ X.509 dùng với TLS
”Bật SSL trên hosting”Cấu hình HTTPS (TLS trên cổng 443)
“SSL 1.0 / 2.0 / 3.0”Đã lỗi thời — trình duyệt tắt lâu rồi
”TLS 1.2 / 1.3”Chuẩn hiện đại nên dùng

Bạn không cần nhớ cipher suite để ship landing page — nhưng cần biết: khi tài liệu ghi SSL, gần như chắc là đang nói TLS + chứng chỉ.

HTTPS = HTTP + TLS

HTTP là giao thức ứng dụng (GET, POST, header, cookie). HTTPS không phải giao thức riêng hoàn toàn mới — đó là HTTP chạy bên trong đường hầm TLS.

Trình duyệt  --TLS (mã hóa + xác thực)--  Server :443
                 bên trong: HTTP request/response

Không có TLS:

Trình duyệt  --HTTP rõ--  Server :80

Trên Wi‑Fi quán cà phê, HTTP để lộ cookie session, token API, form đăng nhập. HTTPS khiến kẻ nghe lén thấy ciphertext — trừ khi họ phá được TLS (rất khó với cấu hình đúng) hoặc lừa bạn tin cert giả (cần lỗi CA / user bỏ qua cảnh báo).

Chứng chỉ số làm gì?

Trong handshake TLS, server gửi chứng chỉ (certificate) để trình duyệt trả lời: “Bạn có đúng là shop.example.com không?”

Chứng chỉ gắn:

  1. Tên miền (thường trong SAN — Subject Alternative Name)
  2. Khóa công khai của server
  3. Thời hạn (notBefore / notAfter)
  4. Chữ ký của Certificate Authority (CA) mà trình duyệt tin

Trình duyệt tin CA vì danh sách root CA đã cài sẵn (Microsoft, Apple, Mozilla, Google…). Self-signed = tự ký = trình duyệt không tin mặc định → cảnh báo đỏ.


Ổ khóa trên trình duyệt nghĩa là gì?

UI thay đổi theo năm (Chrome bỏ “Secure” chữ xanh, Safari/Firefox khác nhau), nhưng ý tưởng chung:

Hiện tượng UIÝ nghĩa thực tế
Ổ khóa / không cảnh báoTLS OK với hostname hiện tại, chứng chỉ trong chuỗi tin cậy
”Not secure” trên HTTPKhông có TLS — dữ liệu rõ
Cảnh báo đỏ / interstitialCert lỗi, hết hạn, tên không khớp, hoặc chuỗi không tin
Ổ khóa nhưng site lừa đảoVẫn có thể — HTTPS chỉ bảo vệ kênh, không chứng minh nội dung trung thực
Hiểu nhầm phổ biến

Ổ khóa không bằng “website an toàn tuyệt đối”. Phishing cũng mua được Let’s Encrypt trong vài phút. Luôn đọc tên miền trên thanh địa chỉ, không chỉ nhìn icon.

Cách đọc chứng chỉ từ padlock (Chrome)

  1. Click biểu tượng bên trái URL
  2. Connection is secureCertificate is valid (hoặc tương đương)
  3. Xem:
    • Issued to / Subject — có khớp domain không?
    • Valid until — còn hạn không?
    • SAN — có www và apex không?

Ví dụ: bạn mở https://api.khachhang.vn nhưng cert chỉ có khachhang.vn → cảnh báo name mismatch, dù cert vẫn còn hạn.


Handshake TLS (phiên bản ngắn cho frontend)

Không cần vẽ đầy đủ RFC. Luồng tối giản:

  1. Client nói: hỗ trợ TLS 1.3, cipher X/Y…
  2. Server chọn phiên bản + gửi chứng chỉ (+ chain trung gian)
  3. Client kiểm: hạn, tên, chữ ký CA, thu hồi (OCSP/CRL tùy triển khai)
  4. Hai bên thống nhất khóa phiên (ephemeral)
  5. Từ đó HTTP đi trong tunnel đã mã hóa

SNI (Server Name Indication): trên một IP nhiều site, client gửi hostname sớm để server chọn đúng cert. Sai SNI / thiếu vhost → đôi khi nhận cert mặc định của hosting (tên khác) → đỏ.


HTTP vs HTTPS — khi nào bắt buộc?

HTTP và HTTPS trong thực tế
Tình huống HTTP HTTPS
Landing tĩnh chỉ đọc Vẫn nên HTTPS (SEO, trust) Chuẩn mặc định 2026
Form login / thanh toán Không chấp nhận Bắt buộc
Cookie session Dễ bị đánh cắp trên Wi‑Fi Kèm Secure; Prefer SameSite
Service Worker / nhiều API hiện đại Bị chặn hoặc hạn chế Yêu cầu secure context
Localhost dev Thường OK không TLS Cần khi test PWA / camera / một số API

Google dùng HTTPS làm tín hiệu xếp hạng từ lâu. Payment gateway, OAuth provider, webhook đối tác hầu như chỉ chấp nhận URL HTTPS.


Lỗi thường gặp quanh “ổ khóa”

1. Chứng chỉ hết hạn

Let’s Encrypt ~90 ngày. Commercial cert 1 năm. Hết hạn → interstitial đỏ, khách bỏ trang. Chi tiết vận hành renew nằm ở kiểm hạn SSL trước outage; ở đây chỉ cần: đọc Valid until trước demo.

2. Tên miền không khớp (NET::ERR_CERT_COMMON_NAME_INVALID)

Mở www. trong khi cert chỉ có apex (hoặc ngược lại). Wildcard *.example.com cover api.example.com nhưng không cover a.b.example.com.

3. Self-signed / nội bộ CA

Staging nội bộ hay dùng. Trình duyệt cảnh báo — đúng hành vi. Đừng bảo khách “cứ Advanced → Proceed” trên production.

4. Mixed content

Trang https:// nhưng:

<script src="http://cdn.example.com/old.js"></script>
<img src="http://shop.vn/banner.jpg" />

Trình duyệt chặn active mixed content (script); ảnh có thể bị cảnh báo. DevTools → Console sẽ ghi mixed content. Sửa: đổi sang https:// hoặc URL tương đối // đã lỗi thời — dùng HTTPS tường minh.

5. Thiếu intermediate certificate

Chain không đầy đủ: một số máy (đặc biệt mobile cũ / Java) fail trong khi Chrome desktop vẫn xanh nhờ cache intermediate. SSL Labs thường báo “Chain issues”.

6. Cloudflare / proxy che origin

Edge xanh ≠ origin xanh. Mode Full (strict) vẫn cần cert hợp lệ trên origin. Probe từ ngoài khi bàn giao.


Case study ngắn

Case A — Demo khách trên staging

Freelancer gửi https://staging-khach.pages.dev. Cert Let’s Encrypt của Pages ổn. Nhưng trong HTML còn http:// tới logo trên host cũ → Console mixed content, trên mobile ảnh trống. Khách tưởng “HTTPS hỏng”. Sửa asset sang HTTPS trong 5 phút.

Case B — Junior hiểu nhầm ổ khóa

Site phishing paypa1.com vẫn có ổ khóa (Let’s Encrypt cấp bình thường). User nhập thẻ vì tin icon. Bài học nội bộ: dạy team đọc hostname, không chỉ “có SSL là an toàn”.


Cách kiểm tra nhanh (3 tầng)

Ba cách kiểm tra SSL/TLS
Cách Ưu Hạn chế
Padlock trình duyệt Nhanh, đúng góc nhìn user Khó so sánh grade / cipher
openssl s_client Script được, xem dates/chain Cần terminal; SNI phải đúng flag
SSL Labs (qua SSL Check) Báo cáo sâu, grade A–F Mất vài phút; phụ thuộc dịch vụ ngoài

openssl (khi có shell)

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -subject
  • -servername = SNI (quan trọng khi shared hosting)
  • notAfter = hạn

Công cụ Kawa → SSL Labs

SSL Check trên Kawa Dev Tools nhận tên miền, rồi mở báo cáo Qualys SSL Labs trong tab mới. Dùng khi cần grade, protocol, chuỗi cert — không phải máy tính hạn cert offline trong trình duyệt. Phù hợp spot-check trước khi gọi điện cho khách lúc 23:00.


Checklist 5 phút trước demo / bàn giao

  1. Mở production URL bằng HTTPS (không chỉ HTTP redirect giả định)
  2. Padlock sạch — không interstitial
  3. Certificate: hostname khớp, còn hạn > 14 ngày (Let’s Encrypt) hoặc > 30 ngày (cert năm)
  4. Console: không mixed content
  5. Thử apex và www nếu cả hai public
  6. (Khuyến nghị) Chạy SSL Check / SSL Labs một lần cho hostname chính
  7. Xác nhận auto-renew tồn tại nếu dùng Let’s Encrypt — chi tiết ở bài kiểm hạn

FAQ nhanh trong đầu khi bị hỏi

  • “SSL là gì?” → Lớp mã hóa cũ; nay là TLS; HTTPS dùng TLS.
  • “Có ổ khóa là an toàn?” → Kênh mã hóa tới đúng tên miền; chưa đủ để tin nội dung.
  • “Sao local không cần?” → localhost thường được trình duyệt nới; production thì bắt HTTPS.
  • “Cài ở đâu?” → Hosting panel / certbot / Cloudflare — tùy stack; chứng chỉ phải khớp hostname terminate TLS.

Liên kết liên quan