HTTPS là gì? Giải thích cho dev + cách kiểm tra site bằng curl 2026

Thấy ổ khóa 🔒 trên thanh địa chỉ rồi yên tâm site an toàn? Đó là hiểu lầm phổ biến nhất về HTTPS – và nó khiến nhiều dev bỏ sót lỗ hổng thật.

TL;DR: HTTPS là HTTP chạy bên trong một lớp mã hóa TLS. Nó đảm bảo 3 thứ giữa trình duyệt và server: dữ liệu được mã hóa (người khác trên đường truyền không đọc được), toàn vẹn (không bị sửa giữa đường), và server được xác thực đúng domain. Nhưng HTTPS chỉ bảo vệ đường truyền – nó KHÔNG đảm bảo nội dung site sạch, không nói site đáng tin. Một trang lừa đảo vẫn có ổ khóa xanh như thường. Bài này giải thích HTTPS hoạt động ra sao ở mức dev hiểu được, và cho bạn cách tự kiểm tra TLS version, HSTS, redirect của chính site mình bằng curl trong một phút.

Mình quản ongboit.com hằng ngày, và phần dưới sẽ dùng chính headers thật của site này làm ví dụ – kể cả một chỗ mình đang thiếu, để bạn thấy “có HTTPS” và “cấu hình HTTPS đúng” là hai chuyện khác nhau.

HTTPS mã hóa đường truyền như phong bì niêm phong, HTTP như bưu thiếp ai cũng đọc được; ổ khóa khác với site an toàn
HTTP như bưu thiếp ai cũng đọc; HTTPS là phong bì niêm phong. Nhưng ổ khóa chỉ mã hóa đường truyền – không đảm bảo site sạch.

HTTPS là gì?

HTTPS (HyperText Transfer Protocol Secure) là giao thức HTTP thông thường nhưng chạy bên trong một lớp mã hóa tên TLS (Transport Layer Security). Hình dung HTTP là một tấm bưu thiếp: ai cầm trên đường giao cũng đọc được nội dung. HTTPS là lá thư đó bỏ vào phong bì niêm phong: người đưa thư vẫn chuyển được, nhưng không mở đọc được, và bạn biết chắc thư đến đúng người nhận.

Cụ thể, HTTPS bọc HTTP để đảm bảo ba thứ:

  1. Mã hóa (encryption): dữ liệu giữa trình duyệt và server bị biến thành chuỗi vô nghĩa với bất kỳ ai chặn giữa đường (quán cà phê wifi, ISP, hacker man-in-the-middle).
  2. Toàn vẹn (integrity): nội dung không bị sửa đổi giữa đường mà hai bên không phát hiện.
  3. Xác thực (authentication): chứng chỉ TLS chứng minh server đúng là domain nó tự nhận, không phải kẻ giả mạo.

Về kỹ thuật: HTTP chạy trên cổng 80, HTTPS chạy trên cổng 443. Lớp TLS nằm giữa tầng TCP và tầng HTTP – nên với lập trình viên, code xử lý request gần như không đổi, chỉ khác phần “vỏ” vận chuyển. Định nghĩa chính thức nằm ở MDN Web Docs về HTTPStài liệu của Cloudflare.

Một điểm hay gây rối: SSL và TLS. SSL (Secure Sockets Layer) là tên giao thức cũ, đã ngừng dùng từ lâu; TLS là phiên bản kế nhiệm và là thứ thực sự chạy hôm nay. Nhưng vì quán tính, người ta vẫn gọi “chứng chỉ SSL” dù bên trong là TLS. Khi bạn nghe “cài SSL cho website”, thực chất là cài chứng chỉ TLS.

HTTP và HTTPS khác nhau ở đâu?

Khác biệt không nằm ở những gì bạn thấy trên trang, mà ở chuyện gì xảy ra trên đường truyền.

Khía cạnh HTTP HTTPS
Cổng mặc định 80 443
Mã hóa đường truyền Không – plain text Có – TLS
Ai chặn giữa đường đọc được? Đọc trọn vẹn Chỉ thấy chuỗi mã hóa
Xác thực server Không Có (chứng chỉ TLS)
Trình duyệt 2026 hiển thị “Not secure” / cảnh báo Ổ khóa, không cảnh báo
Dùng được HTTP/2, HTTP/3 Hạn chế Có (yêu cầu TLS)

Điểm thực tế đáng nhớ: từ khoảng 2018, Chrome và Firefox bắt đầu gắn nhãn “Not secure” lên mọi trang HTTP. Nghĩa là một site còn chạy HTTP thuần năm 2026 vừa kém an toàn, vừa bị trình duyệt chủ động cảnh báo người dùng – mất niềm tin ngay trước khi họ đọc nội dung.

“Có ổ khóa xanh” KHÔNG có nghĩa site an toàn

Đây là phần đa số bài tiếng Việt nói thiếu, và là hiểu lầm tốn kém nhất.

Ổ khóa 🔒 chỉ chứng minh một điều duy nhất: kết nối giữa bạn và server này được mã hóa, và server đúng là domain ghi trên chứng chỉ. Nó không nói:

  • Nội dung site có đáng tin không. Một trang lừa đảo paypa1-login.com vẫn xin được chứng chỉ TLS miễn phí và hiện ổ khóa xanh hệt như trang thật.
  • Server có bị hack chưa.
  • Form của site có gửi dữ liệu đi đâu khác không.

Chứng chỉ TLS miễn phí (qua Let’s Encrypt) đã làm việc xin chứng chỉ trở nên dễ với bất kỳ ai – kể cả kẻ xấu. Nên ổ khóa hôm nay chỉ còn nghĩa “đường truyền được mã hóa”, không phải “site này đáng tin”. Bài học cho cả dev lẫn người dùng: HTTPS là điều kiện cần, không phải điều kiện đủ của một site an toàn.

Làm sao tự kiểm tra HTTPS của site bằng curl?

Không cần tool trả phí. Một lệnh curl -I (chữ I hoa, lấy headers) cho bạn biết site cấu hình HTTPS đúng tới đâu. Đây là cách mình kiểm tra ongboit.com:

curl -I https://ongboit.com

Kết quả thật (đo ngày 13/6/2026):

HTTP/1.1 200 OK
Alt-Svc: h3=":443"; ma=2592000
Content-Type: text/html; charset=UTF-8
Server: Apache/2.4.66 (Debian)

Đọc gì từ đây:

  • Alt-Svc: h3 – site có bật HTTP/3 (giao thức mới nhất, chạy trên QUIC, nhanh hơn HTTP/2 ở mạng chập chờn). Dấu hiệu tốt.
  • Server: Apache/2.4.66 (Debian) – để ý: ongboit đang lộ cả phiên bản Apache cụ thể. Đây là một info-disclosure nhỏ; production nên rút gọn ServerTokens Prod để chỉ trả Server: Apache. Một gap nữa chính curl -I này phơi ra.
  • Còn một dòng quan trọng đang thiếu: Strict-Transport-Security. Đây là header HSTS – mình nói kỹ ở phần sau, và đây chính là chỗ ongboit đang cần bổ sung.

Kiểm tra tiếp redirect từ HTTP sang HTTPS:

curl -I http://ongboit.com
HTTP/1.1 308 Permanent Redirect
Location: https://ongboit.com/

308 là redirect vĩnh viễn, ép mọi truy cập HTTP nhảy sang HTTPS – đúng chuẩn. Nếu site bạn trả về 200 ở http:// (không redirect), nghĩa là vẫn phục vụ bản HTTP thuần, cần sửa.

Cuối cùng, kiểm tra phiên bản TLS bằng openssl:

echo | openssl s_client -connect ongboit.com:443 -servername ongboit.com 2>/dev/null | grep Protocol
Protocol  : TLSv1.3

ongboit.com đang chạy TLS 1.3 – phiên bản mới nhất, nhanh và an toàn nhất hiện nay.

TLS 1.2, 1.3 và những phiên bản đã chết

Không phải mọi TLS đều như nhau. Bảng nhanh trạng thái 2026:

Phiên bản Năm ra Trạng thái 2026
TLS 1.3 2018 (RFC 8446) hiện hành, nên dùng
TLS 1.2 2008 (RFC 5246) còn chấp nhận được
TLS 1.1 2006 đã khai tử (RFC 8996, 2021)
TLS 1.0 1999 đã khai tử (RFC 8996, 2021)

Diễn giải:

  • TLS 1.3: chuẩn mới nhất, bắt tay nhanh hơn (1 vòng thay vì 2), bỏ hết các thuật toán mã hóa yếu. Nên dùng.
  • TLS 1.2: vẫn an toàn nếu cấu hình cipher đúng, còn phổ biến rộng rãi. Chấp nhận được.
  • TLS 1.0 và 1.1: đã bị khai tử. RFC 8996 (công bố tháng 3 năm 2021) chính thức deprecated cả hai; các trình duyệt lớn đã gỡ hỗ trợ từ 2020. Một máy chủ còn bật TLS 1.0 năm 2026 là đang mở cửa cho các kiểu tấn công cũ – tự rước cảnh báo bảo mật và rủi ro tuân thủ.

Quy tắc thực dụng: cấu hình server chỉ cho phép TLS 1.2 trở lên, ưu tiên TLS 1.3. Mọi thứ dưới mức đó tắt đi. Trên Apache (như ongboit), một dòng trong virtual host là đủ:

SSLProtocol -all +TLSv1.2 +TLSv1.3

Trên Nginx thì là ssl_protocols TLSv1.2 TLSv1.3;. Sau khi đổi, chạy lại curl/openssl ở trên để xác nhận server không còn chấp nhận phiên bản cũ.

HSTS là gì và vì sao ongboit đang thiếu nó?

Có HTTPS rồi vẫn còn một lỗ hổng tinh vi: lần đầu tiên user gõ ongboit.com (không có https://), trình duyệt vẫn thử HTTP trước, rồi mới ăn redirect 308 sang HTTPS. Khoảnh khắc HTTP ngắn ngủi đó là cửa cho tấn công man-in-the-middle.

HSTS (HTTP Strict Transport Security) bịt cửa này. Đó là một header server gửi về, ra lệnh cho trình duyệt: “từ giờ, với domain này, LUÔN dùng HTTPS, đừng bao giờ thử HTTP nữa.” Header trông thế này:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

max-age=31536000 là số giây trong một năm – tức trình duyệt nhớ quy tắc HTTPS-only suốt 12 tháng. includeSubDomains áp dụng cho mọi subdomain, preload cho phép đăng ký domain vào danh sách HSTS preload cứng của trình duyệt – khi đó trình duyệt ép HTTPS ngay cả ở lần truy cập đầu tiên, bịt nốt cái khe HTTP đầu kia.

Hai cảnh báo trước khi bật: chỉ thêm includeSubDomainspreload khi bạn chắc chắn MỌI subdomain đã chạy HTTPS – vì gỡ một domain khỏi danh sách preload rất chậm. Và header HSTS phải xuất hiện trên chính response HTTPS, nếu thiếu thì hstspreload.org từ chối domain.

Quay lại kết quả curl ở trên: ongboit.com chưa có header này. Tức là site đã chuyển HTTPS đầy đủ, redirect 308 đúng, TLS 1.3 ngon – nhưng vẫn hở cái khe HTTP lần-truy-cập-đầu. Đây đúng là minh họa cho luận điểm xuyên suốt bài: “có HTTPS” (đã xong) khác “cấu hình HTTPS chặt” (HSTS là bước mình còn nợ). Mình để nguyên ví dụ thật này thay vì giả vờ site hoàn hảo, vì nó dạy đúng bài học hơn.

Mixed content là gì và sửa ra sao?

Có thêm một cái bẫy sau khi đã lên HTTPS. Một trang https:// mà lại nạp ảnh, script hay CSS qua đường http:// thì gọi là mixed content (nội dung pha trộn). Hình dung: cả căn nhà khóa kỹ nhưng chừa một cửa sổ mở – phần nạp qua HTTP không được lớp mã hóa bảo vệ, kẻ tấn công vẫn đọc hoặc sửa được nó. Trình duyệt vì thế sẽ chặn hoặc cảnh báo, và ổ khóa xanh hiện không đầy đủ.

Một dòng bị xem là mixed content trông như sau:

<img src="http://example.com/anh.png">

Cách triệt để là sửa mọi link nội bộ về https://. Nhưng nếu site có nhiều nội dung cũ trỏ http:// chưa sửa hết ngay, đặt header này để trình duyệt tự nâng cấp các yêu cầu đó lên HTTPS:

Content-Security-Policy: upgrade-insecure-requests

Đây là giải pháp tạm khi dọn dần – không thay thế việc sửa link tận gốc.

Khi nào KHÔNG cần lo lắng quá về HTTPS nâng cao?

Để cân bằng: không phải site nào cũng cần HSTS preload + TLS 1.3 tuning ngay hôm nay.

4 tầng siết HTTPS từ cần tới đủ: HTTPS+TLS 1.3, ép redirect 308, HSTS, security headers
4 tầng siết HTTPS. Tầng 1-2 (HTTPS + redirect) là điều kiện CẦN cho mọi site; tầng 3-4 (HSTS + headers) là phần khóa kỹ, ưu tiên theo độ nhạy cảm dữ liệu.
  • Blog cá nhân / landing tĩnh không thu thập dữ liệu: có HTTPS + redirect 308 là đủ phần lớn nhu cầu. HSTS là điểm cộng, không phải khẩn cấp.
  • Site có form đăng nhập, thanh toán, dữ liệu cá nhân: đây là lúc HSTS, TLS 1.3, và cấu hình cipher chặt trở thành bắt buộc, không phải tùy chọn.

Nói cách khác: đừng để việc cố đạt điểm A+ trên các tool quét bảo mật làm bạn quên rằng phần lớn giá trị nằm ở ba thứ cơ bản – bật HTTPS, ép redirect, dùng TLS 1.2 trở lên. HSTS và các tinh chỉnh sâu là lớp tiếp theo, ưu tiên theo mức độ nhạy cảm của dữ liệu site xử lý.

HTTPS ảnh hưởng SEO thế nào?

HTTPS là một tín hiệu xếp hạng Google công bố từ 2014, nhưng trọng số nhỏ – đừng kỳ vọng bật HTTPS xong là lên hạng. Tác động lớn hơn nằm ở trải nghiệm và niềm tin: Chrome gắn nhãn “Not secure” lên mọi trang HTTP, và cái nhãn đó làm người dùng chùn tay ngay trước khi đọc nội dung, kéo tỷ lệ rời trang lên.

Với bối cảnh 2026, còn một tầng nữa: một trang muốn được trích dẫn trong câu trả lời AI hay xếp hạng tốt thì HTTPS là mức sàn, không phải điểm cộng. Thiếu nó, bạn bị loại ngay từ vòng gửi xe. Có nó, bạn mới vào sân chơi – phần thắng vẫn quyết bởi content và authority.

Những lỗi người mới hay mắc với HTTPS

Sau khi giúp vài site chuyển sang HTTPS, mình thấy bốn lỗi lặp đi lặp lại:

  1. Tưởng có ổ khóa là xong, bỏ qua HSTS và security headers. Đây đúng là lỗi mình đang mắc trên chính ongboit.com (đã thấy ở phần curl bên trên). Bản sửa chỉ là thêm vài dòng header.
  2. Quên ép redirect, để site chạy song song cả http://https://. Hai phiên bản cùng tồn tại làm loãng tín hiệu và gây trùng nội dung. Chuyển hướng toàn bộ về HTTPS (308 hoặc 301 đều là permanent redirect hợp lệ).
  3. Còn sót ảnh hoặc script cũ trỏ http://. Đây là mixed content, khiến ổ khóa hiển thị không đầy đủ. Quét và sửa, hoặc dùng upgrade-insecure-requests làm giải pháp tạm.
  4. Bật preload quá sớm. Nếu một subdomain chưa lên HTTPS mà đã bật preload, subdomain đó thành không truy cập được – và gỡ khỏi danh sách rất chậm.

Câu hỏi thường gặp

HTTPS có làm site chậm hơn HTTP không?

Gần như không đáng kể với phần cứng và TLS 1.3 hiện nay. Bắt tay TLS 1.3 chỉ tốn một vòng round-trip, và HTTP/2 cùng HTTP/3 (chỉ chạy trên HTTPS) thực tế làm site nhanh hơn HTTP/1.1 thuần nhờ multiplexing. Lo ngại “HTTPS chậm” là di sản từ thời TLS cũ, không còn đúng.

Chứng chỉ TLS miễn phí (Let’s Encrypt) có kém an toàn hơn loại trả phí không?

Không. Mức mã hóa của chứng chỉ miễn phí và trả phí giống hệt nhau. Khác biệt nằm ở thời hạn (Let’s Encrypt 90 ngày, cần tự động gia hạn) và loại xác thực (chứng chỉ trả phí có thể có OV/EV xác minh tổ chức). Với phần lớn website, chứng chỉ miễn phí auto-renew là quá đủ.

Chữ “S” trong HTTPS là gì?

“S” là Secure. HTTPS = HTTP + Secure, với phần “secure” đến từ lớp mã hóa TLS bọc bên ngoài giao thức HTTP gốc.

HTTPS có chống được mọi tấn công không?

Không. HTTPS bảo vệ dữ liệu trên đường truyền giữa trình duyệt và server. Nó không chống được XSS, SQL injection, server bị hack, hay site lừa đảo có chứng chỉ hợp lệ. HTTPS là một lớp trong nhiều lớp bảo mật, không phải tất cả.

Tự kiểm hay để công cụ lo?

Ba lệnh curl -I, curl -I http://, và openssl s_client ở trên đủ để bạn tự soát HTTPS cơ bản của một site trong một phút – và mình khuyên mọi dev nên chạy thử trên chính site mình ngay hôm nay. Nhưng khi cần soát cả cụm HTTPS + security headers + redirect chain + mixed content trên nhiều trang định kỳ, làm tay từng URL bắt đầu đuối. Mình đã gói phần đó vào quy trình audit security trong bộ check Audit Website, nơi HTTPS/TLS/HSTS là nhóm check nền tảng nằm chung với CSP, GDPR và PDPL (Luật Bảo vệ dữ liệu cá nhân 91/2025). Còn nếu muốn người làm rà tận nơi thì xem dịch vụ SEO audit website.

HTTPS năm 2026 không còn là tùy chọn – nó là mặc định, và trình duyệt phạt thẳng tay site nào còn thiếu. Nhưng đừng dừng ở ổ khóa xanh: nó chỉ là khởi đầu của bảo mật, không phải đích đến.

Similar Posts