Làm sao một cái tên thành địa chỉ, và địa chỉ thành một kết nối đáng tin: domain bạn mua, DNS đổi tên sang IP, và chứng chỉ chứng minh ai đang đứng phía sau.
← / → để chuyển slide · chuyển EN/VI bên dưới
Trước khi trình duyệt hiển thị trang, internet âm thầm giải quyết ba vấn đề. Bài này đi qua từng vấn đề một.
Người ta gõ tên (example.com), máy nói bằng địa chỉ (IP). Phải có thứ nào đó sở hữu tên và dịch chúng ra.
Internet là lưới cáp và router. DNS biến tên thành IP để gói tin của bạn biết đường đi.
Ai cũng có thể giả mạo server. TLS cùng chứng chỉ chứng minh site đúng là người site tự nhận — và giữ chuyến đi được mã hóa.
Bốn trạm, một chuyến đi. Phần còn lại của bài chỉ là phóng to một trong bốn trạm.
Cái tên bạn sở hữu: example.com. Mua từ registrar, là của bạn chừng nào còn trả tiền.
Cuốn sổ điện thoại: example.com → 203.0.113.5. Tra cứu biến tên thành địa chỉ.
Trình duyệt nối tới IP đó trên cổng 443 và nói chuyện với server của bạn.
Con dấu: lưu lượng mã hóa cùng danh tính được xác minh. Riêng tư, và có thể chứng minh là của bạn.
domain = cái tên · dns = tên→ip · tls = tin cậy + mã hóa — gộp lại: một site chuyên nghiệp
Không thể ship một site chuyên nghiệp từ IP trần. Domain là cái tên thế giới dùng để biết bạn — và thứ đầu tiên bạn kiểm soát.
IP mới là địa chỉ thật — nhưng khó với con người, và mong manh với người vận hành.
Tên kiểu example.com dễ nhớ, dễ gõ, dễ làm thương hiệu. Trình duyệt không nhớ — DNS lo nhớ giúp bạn.
Chuyển cả site sang server mới (IP mới), chỉ đổi một record DNS. Khách hàng không hề hay biết.
you@example.com — domain sau dấu @ là danh tính email của bạn. IP trần không làm được điều đó.
Tên là lời hứa về sự liên tục. Người ta lưu, in, gõ nó. Đó là địa chỉ của bạn trong thế giới.
Ba vòng, từ ít là của bạn nhất đến là của bạn nhất: TLD là con phố, SLD là số nhà, subdomain là các căn phòng.
shop.example.com
shop subdomain — as many as you want, you decide
example SLD — the name YOU bought (second-level domain)
com TLD — top-level domain: .com .io .dev .vn ...
shop.example.com = room + house + street
Bạn mua vòng giữa. TLD do ICANN cấp phép cho các registry; subdomain là vùng đất miễn phí trong chính domain của bạn.
Cửa hàng có giấy phép cấp tên từ registry của một TLD — không hơn, không kém.
Namecheap, GoDaddy, Cloudflare… đều mua tên từ cùng các registry rồi bán lại. Giá do cửa hàng tự định.
Trả tiền, bạn có tên và bảng điều khiển để đặt record DNS (record A và NS — bạn sẽ gặp ở phần sau). Bảng đó là toàn bộ sản phẩm.
Hết hạn mà không gia hạn, tên quay về pool — cùng toàn bộ traffic, email và link trỏ tới nó.
Vì tên sống trong registry toàn cầu, bạn có thể chuyển giữa các registrar bất cứ lúc nào. Không ai giữ được cái tên làm con tin.
Bán tên và lưu record là hai việc khác nhau. Thường chúng đi kèm một tài khoản — nhưng bạn có thể (và đôi khi nên) tách ra.
Chỗ thanh toán. Bạn trả tiền, họ ghi tên trong registry dưới quyền bạn. Họ không trả lời truy vấn cho nó.
Hãy nghĩ: cơ quan cấp biển số.
Cloudflare, VPS của bạn, dịch vụ DNS của chính registrar — ai cũng có thể giữ record của domain và trả lời truy vấn cho nó.
Hãy nghĩ: công ty điện thoại vận hành mục của bạn trong sổ.
Mua tên một lần, và mọi thứ khác — server, CDN, email — có thể thay đổi quanh nó mà khách hàng không hề hay biết.
Mỗi domain có một trang trong cuốn sổ điện thoại toàn cầu, phân tán: 'example.com, 203.0.113.5'. DNS là hệ thống duy trì cuốn sổ và trả lời các câu hỏi về nó.
Không có máy DNS trung tâm. Cuốn sổ được chia thành các lát, mỗi lát do người sở hữu phần tên đó giữ.
Gốc biết ai vận hành .com. Lát .com biết ai vận hành example.com. Mỗi cấp chỉ biết cấp ngay dưới nó.
'example.com → 203.0.113.5' là một record (record A). Một domain mang vài record: địa chỉ, mail, xác minh…
Resolver của ISP tra sổ thay bạn và nhớ đáp án trong suốt TTL — cùng một câu hỏi không bao giờ đi vòng quanh thế giới hai lần.
Bạn nhập record vào panel của registrar; resolver khắp thế giới nhận thay đổi trong vòng TTL. Đó là toàn bộ công việc, xong.
Trình duyệt của bạn không tự đi truy tìm đáp án — resolver của bạn làm việc đó, và mỗi chặng chỉ trả lời 'tôi không biết, nhưng hãy hỏi họ'.
Gõ shop.example.com. Trình duyệt hỏi resolver: 'IP là gì?'
Server của ISP — người đi truy tìm cả chuỗi, cache đáp án, trả IP cho bạn.
'Tôi không biết tên đó — nhưng .com do họ lo.'
'Record của example.com nằm ở ns1.example-dns.net — sang đó mà hỏi.'
Chính trang sổ: 'shop.example.com. A → 203.0.113.5, TTL 300'. Đáp án quay về.
mỗi chặng = một câu hỏi · resolver lo cả bốn chặng để trình duyệt nhận một đáp án duy nhất, tức thì
dig đặt một câu hỏi DNS và in đáp án. +short chỉ trả về IP — câu kiểm tra 'đã trỏ đúng chưa' mỗi ngày.
Một domain có thể mang cả tá loại record. Sáu cái xuất hiện ngoài đời — hai cái đầu là 90% công việc của bạn.
| Record | Nó trả lời | Ví dụ |
|---|---|---|
| A | Tên → địa chỉ IPv4 | shop.example.com → 203.0.113.5 |
| AAAA | Tên → địa chỉ IPv6 | shop.example.com → 2001:db8::1 |
| CNAME | Tên → một tên khác (biệt danh) | www.example.com → shop.example.com |
| NS | Ai có thẩm quyền với tên này | example.com → ns1.example-dns.net |
| MX | Server nào nhận mail cho domain | example.com → mail.example.com |
| TXT | Dữ kiện tự do — xác minh, SPF | example.com → "v=spf1 -all" |
Quên mấy cái còn lại cho tới khi cần. Hai cái này là toàn bộ câu chuyện 'trỏ domain của tôi sang server của tôi'.
Một dòng: 'tên này sống ở địa chỉ IPv4 này.' Đổi record A là cả domain chuyển nhà — không đụng code.
Server nào giữ sự thật cho tên này. Trỏ NS sang provider mới là cả trang sổ chuyển theo — registrar không cản nổi.
www → tên thật của bạn. Trình duyệt theo biệt danh đến record thật. Chỉ một IP cần bảo trì thay vì hai.
Chỗ đặt mã xác minh (Google Search Console, một số CA). Bạn sẽ gặp lại nó ở phần Let's Encrypt.
Năm dòng trong panel DNS của registrar — và site truy cập được bằng tên, trên toàn thế giới.
# registrar panel -> example.com -> DNS records
name type value
@ A 203.0.113.5 # the site -> your VPS
@ NS ns1.example-dns.net # who is in charge
@ NS ns2.example-dns.net
www CNAME @ # alias -> the site
@ TXT "v=spf1 -all" # mail policy
'@' nghĩa là chính domain. Mỗi dòng là một dữ kiện cuốn sổ sẽ trả lời thay bạn.
Bạn đã có VPS với IP công (chẳng hạn 203.0.113.5) và web server đang chạy. Giờ trỏ tên sang nó.
VPS của bạn có một IP công. Đó là địa chỉ record sẽ mang.
Trong panel DNS: name = @ (hay example.com), type = A, value = IP VPS. Lưu.
Resolver khắp thế giới vẫn giữ đáp án cũ (hoặc chưa có) cho tới khi TTL hết hạn. Vài phút đến một ngày.
dig từ mạng khác (dùng hotspot điện thoại cũng được). Nếu trả về IP của bạn, thế giới có thể tìm thấy bạn bằng tên.
Một câu hỏi thẳng tới resolver công cộng (sự thật bên ngoài); một câu hỏi resolver cục bộ (làng xóm nghĩ gì).
DNS không có 'push' — thế giới tự đọc lại trang của bạn theo lịch của họ, và lịch đó là TTL.
Mỗi đáp án mang một hạn: 'nhớ cái này 300 giây'. Resolver tuân thủ và bỏ qua cả bốn chặng cho tới lúc đó.
TTL là núm chỉnh bạn kiểm soát trong record của mình.
Khi bạn đổi record, mỗi resolver trên thế giới nhận ra tại thời điểm hết hạn của mình. Tồi nhất: một TTL cũ trọn vẹn.
Mẹo: hạ TTL xuống 300 một ngày trước khi chuyển, rồi nâng lại sau đó.
Những sự thật nhìn từ tổng quan giúp tiết kiệm giờ debug thật.
Đáp án đã cache là tức thì. Chỉ lần tra cứu đầu tiên của một tên phải trả giá cho bốn chặng.
Thường là vài phút. 48 giờ là kịch bản tồi nhất — TTL cao cũ còn nằm trong resolver của ai đó.
Họ thường lưu cho tiện. NS nào cũng được — Cloudflare, VPS của bạn, ai cũng xong.
Record CNAME + A cho phép www, app và api trỏ sang những máy hoàn toàn khác nhau.
DNS đã đưa bạn tới địa chỉ đúng. Nhưng chuyến đi vẫn là text trần, và ai cũng có thể giả mạo nơi đến. TLS và hạ tầng khóa công khai sửa cả hai.
Giữa bạn và server có router, ISP, Wi-Fi quán cà phê. Không ai trong số đó trung thành với bạn cả.
HTTP trần là bưu thiếp: mỗi chặng đều nhìn thấy mật khẩu, token, tin nhắn. 'Riêng tư' không có trong từ điển.
Một chặng giữa có thể sửa thứ bạn nhận — chèn quảng cáo, script, 'mật khẩu của bạn giờ là…'. Không ai hay, vì dữ liệu không có chữ ký.
Trên Wi-Fi mở, 'bank.com' có thể là chiếc điện thoại ở góc quán. Tên trỏ đúng — chỉ là sai máy.
Một giao thức: TLS. Nó mã hóa chuyến đi, ký dữ liệu, và chứng minh danh tính server bằng chứng chỉ. Đó là biểu tượng ổ khóa.
Người ta gộp chúng thành 'cái ổ khóa'. Về cơ chế, TLS làm hai việc riêng biệt bằng hai công cụ riêng biệt.
Trình duyệt và server thống nhất một khóa bí mật; mọi thứ sau đó đều thành tiếng lảm nhảm với bất kỳ ai ở giữa. Kể cả ISP của server cũng chỉ thấy nhiễu.
Giải quyết bằng khóa tạm — tạo cho mỗi kết nối, bỏ đi sau đó.
Server xuất trình chứng chỉ gắn khóa công khai của nó với 'example.com', được ký bởi một Cơ quan Chứng chỉ mà trình duyệt của bạn đã tin.
Giải quyết bằng khóa công khai — chủ đề của mọi thứ bên dưới.
Toàn bộ câu chuyện niềm tin của internet dựa trên một thủ thuật: cặp khóa mà một chiếc khóa, chỉ chiếc kia mở được.
Server tạo một khóa riêng (không bao giờ rời server) và một khóa công (công khai cho tất cả). Toán học khiến chúng là đôi: cái này khóa, cái kia mở.
Khóa công như khe thư của thùng thư: ai cũng bỏ thư vào, nhưng chỉ người có chìa mở được. Rò khóa công chẳng mất gì.
Nó ký và giải mã — bất cứ điều gì server làm để chứng minh là chính nó. Nếu bị rò, danh tính hỏng: đó là lý do chứng chỉ có ngày hết hạn.
Ai cũng tạo được cặp khóa và in 'tôi là example.com'. Vậy: ai đảm bảo khóa thật sự thuộc về example.com? Vào sân: CA.
Chứng chỉ là khóa công khai cùng một danh tính, được CA ký. Trình duyệt của bạn tin các gốc — và các gốc ký xuống suốt chuỗi.
Giữ một khóa riêng (không bao giờ chia sẻ) và một khóa công. Khóa công + 'tôi là example.com' thành chứng chỉ.
Kiểm tra bạn điều khiển example.com, rồi ký chứng chỉ bằng khóa riêng của nó — con dấu 'chứng nhận bởi' dạng số.
Đi kèm các CA gốc tích sẵn (nói ngắn gọn: tin chúng). Kiểm tra chuỗi chữ ký và tên — rồi ổ khóa chuyển xanh.
nếu thiếu hay không được ký ở bất kỳ mắt xích nào, trình duyệt chặn trang bằng cảnh báo
Không phải lớp bảo vệ thần kỳ — một văn bản cụ thể với một nhiệm vụ cụ thể: 'khóa công khai này thuộc về tên này, và tôi chịu trách nhiệm'.
Chứng chỉ mang khóa công của bạn và nói 'example.com'. Đó là phần cốt lõi — phần còn lại là thủ tục giấy tờ quanh nó.
CA ký chứng chỉ bằng khóa riêng của nó. Trình duyệt kiểm tra chữ ký bằng khóa công của CA — sửa một byte là hỏng.
Chứng chỉ sống ~90 ngày (Let's Encrypt) tới vài năm (doanh nghiệp). Hết hạn = không đáng tin, theo luật của trình duyệt.
Nhà cung cấp OS và trình duyệt cài sẵn một vài CA gốc sau khi kiểm toán chúng. Danh sách đóng ấy là nền tảng của mọi niềm tin web.
Toàn bộ nghi lễ chạy trong vài phần nghìn giây, mỗi lần bạn mở một trang https. Bạn không bao giờ thấy nó — cho tới khi nó hỏng.
'Xin chào, tôi là example.com — đây là khóa công của tôi, được ký bởi chuỗi CA này.'
Chứng chỉ do intermediate ký? Có quen không? Intermediate do một root trong kho tích sẵn của tôi ký? Mỗi chữ ký được kiểm tra bằng khóa công của bên ký.
Chứng chỉ có thật sự ghi example.com không? Nó có trong cửa sổ hiệu lực không? Một câu 'không' là mọi thứ dừng lại.
Trình duyệt và server suy ra một bí mật chung; từ đây trang, nhập liệu của bạn và mọi response đi mã hóa.
curl không thể xác minh chứng chỉ nó không tin — và nói toạc ra. Trình duyệt hiển thị cùng sự thật ấy dưới dạng trang cảnh báo.
Biểu tượng ổ khóa là một tuyên bố có phạm vi chính xác. Hai cách đọc sai phổ biến nhất đã khiến nhiều dự án thực tế phải trả giá.
'Chuyến đi là riêng tư, và server tôi đang nói chuyện chính là người có chứng chỉ được ký cho domain này.'
Chứng chỉ hợp lệ trên domain lừa đảo vẫn là domain lừa đảo. Site phishing có ổ khóa xanh hoàn hảo — cái tên mới là thứ cần xem xét.
Tài nguyên phụ ở URL http:// vẫn có thể bị lộ. Cảnh báo mixed-content trong console devtools là dấu hiệu nhận ra.
Hộp bay ra hiện tên, CA và ngày hết hạn. Ba mươi giây đọc nhanh hơn mọi cách đoán.
Suốt nhiều năm, một chứng chỉ nghĩa là thủ tục giấy tờ và tiền. Let's Encrypt khiến nó miễn phí, tự động, 90 ngày — và cả web chuyển xanh.
Let's Encrypt là một Cơ quan Chứng chỉ thật, nổi tiếng — loại mà trình duyệt của bạn đã tin. Điểm khác biệt duy nhất: nó ký bằng máy, trong vài phút.
Tổ chức phi lợi nhuận, được tài trợ bởi quyên góp và các công ty công nghệ. Nếu bạn điều khiển một domain, bạn có thể lấy chứng chỉ bằng một lệnh.
Giao thức ACME cho phép server của bạn nói chuyện trực tiếp với Let's Encrypt: yêu cầu, chứng minh sở hữu, nhận chứng chỉ, gia hạn. Không người, không biểu mẫu.
Tuổi thọ ngắn nghĩa là khóa riêng rò rỉ sẽ hết quan trọng sau một quý. Gia hạn được tự động hóa — đó là thiết kế, không phải hạn chế.
Gốc của nó nằm trong mọi trình duyệt và OS chính. Với cái ổ khóa, nó giống hệt chứng chỉ doanh nghiệp 200 USD/năm.
CA không nhìn thấy registrar của bạn. Nó thử một điều: 'bạn có đặt được một bí mật lên domain này không?' Nếu có, bạn điều khiển nó.
certbot nói với Let's Encrypt: 'tôi cần chứng chỉ cho example.com'.
Let's Encrypt đưa bạn một chuỗi ngẫu nhiên: 'đặt chuỗi này ở http://example.com/.well-known/acme-challenge/abc123'.
Web server của bạn trả lời URL đó bằng token. Nếu domain trỏ về bạn và server của bạn trả lời, bạn điều khiển domain.
Nó lấy token từ internet công cộng, kiểm tra khớp, và cấp chứng chỉ đã ký của bạn. Tổng thời gian: dưới một phút.
certbot chạy điệu nhảy ACME cùng web server của bạn (nginx ở đây), cài chứng chỉ, và nối gia hạn tự động. Sau đó bạn quên nó đi.
Công việc duy nhất kéo dài là 'đừng để gia hạn hỏng'. Mọi thứ khác là một lệnh.
Chứng chỉ sống 90 ngày. Từ khoảng ngày 60 trở đi nó 'đến lượt gia hạn' — certbot tự gia hạn, không cần thông báo.
Một systemd timer (hoặc cron) chạy 'certbot renew' vài lần mỗi ngày. Nếu không có gì đến hạn, nó sẽ im lặng và thoát.
Firewall chặn port 80 trong lúc thử thách, một record DNS bị dời, hoặc timer bị tắt sau khi chuyển nhà. Log renew là chỗ cần kiểm tra.
Một lần sau khi cài: đọc một log gia hạn và xem nó thành công. Sau đó, nó là cỗ máy fire-and-forget.
Ba cỗ máy, một đường ống. Bạn sở hữu cả ba — và mỗi cái có thể đổi mà không phá hỏng hai cái còn lại.
Mua một lần từ registrar. Danh tính của bạn: site, email, thương hiệu. Nó sống lâu hơn mọi server.
Một hay hai record trỏ tên sang IP VPS. Đổi một dòng là cả site chuyển.
Chứng chỉ miễn phí, gia hạn tự động, gắn server của bạn với cái tên. Mã hóa, xác minh, xanh.
truy cập được bằng tên · dời được tùy ý · được tin mặc định — ba thuộc tính mọi site chuyên nghiệp đều có
Toàn bộ bài, nén lại thành năm hành động bạn thực sự làm — và lệnh chứng minh từng bước đã thành.
| # | Bước | Chứng minh bằng |
|---|---|---|
| 1 | Mua domain từ một registrar | you@example.com mail works |
| 2 | Thêm record A: @ → IP VPS của bạn | dig example.com A +short |
| 3 | Thêm CNAME www → example.com | dig www.example.com |
| 4 | Chạy certbot --nginx -d example.com | curl -I https://example.com |
| 5 | Xác nhận certbot.timer đang chạy | systemctl list-timers |
Bạn không cần học thuộc loại record DNS hay trường trong chứng chỉ. Bạn cần một bức tranh: một cái tên, một cuốn sổ, và một lời hứa đã ký — cùng năm lệnh giữ cho chúng trung thực.
Mua tên, trỏ record, chạy certbot — rồi đi xây thứ mà chứng chỉ bảo vệ.