
Security Essentials 025.3: Bảo vệ Quyền riêng tư
Học bảo vệ quyền riêng tư qua cookie, fingerprinting, hồ sơ và quyền dữ liệu; thực hành quan sát cookie trong lab riêng, phân biệt xóa cục bộ và log server.

Hiểu HTTPS và lỗi chứng thư qua SAN, thời hạn và CA; thực hành TLS trong lab riêng, kiểm tra sai tên máy chủ và bàn giao lỗi mà vẫn giữ xác minh.
Cổng nhân sự thường dùng bỗng hiện cảnh báo chứng thư. Đồng nghiệp đề nghị bấm tiếp vì “trang nội bộ vẫn thế”. Help Desk cần xác định lỗi tên dịch vụ, thời gian hay chuỗi tin cậy trước khi cho người dùng nhập mật khẩu. Bỏ qua cảnh báo có thể khiến kết nối mất bước xác minh đúng máy chủ.
Sau bài này, bạn phân biệt HTTP với HTTPS, đọc SAN và thời hạn chứng thư, nhận diện các nhóm lỗi rồi thu thập bằng chứng để bàn giao. Cần biết URL, terminal, tệp và mã thoát; nên hoàn thành bài mật mã và PKI trước.
Bài tham chiếu mục 022.2 của giáo trình Security Essentials 1.0 tiếng Việt ngày 15/04/2026, trang in 71–88. Đối chiếu mục tiêu LPI và tài liệu chính thức đến 23/10/2026. Lab chạy Ubuntu 26.04.1 ARM64, OpenSSL 3.5.5, curl 8.18.0 và Python 3.14.4 trong container riêng. Không coi kiểm thử curl là kiểm thử mọi trình duyệt.
HTTP định nghĩa cách trao đổi yêu cầu và phản hồi. Khi truyền không có lớp mã hóa phù hợp, bên có khả năng quan sát đường truyền có thể đọc hoặc can thiệp dữ liệu. HTTPS bổ sung bảo vệ truyền tải và xác minh danh tính dịch vụ theo tên mà client dự kiến kết nối. Máy chủ kết thúc TLS vẫn có thể đọc nội dung để xử lý.
Với HTTP/1.1 hoặc HTTP/2 trên TLS/TCP, cổng HTTPS mặc định thường là 443. Không suy ra mọi HTTPS đều đi TCP: HTTP/3 chạy trên QUIC. Lab dùng cổng 8443 và HTTP/1.0 phản hồi từ server Python qua TLS 1.3, không minh họa HTTP/3.
Tên SSL còn xuất hiện trong cách gọi chứng thư, nhưng đó không phải lý do bật giao thức SSL cũ. TLS 1.3 dùng cơ chế bảo vệ bản ghi hiện đại; không mô tả mọi phiên như cùng một công thức mã hóa rồi gắn MAC riêng. Bài này tập trung điều kiện xác minh chứng thư, không hướng dẫn tự thiết kế mật mã.
Một trang lừa đảo vẫn có thể có HTTPS cho tên miền của nó. Cần đối chiếu chính xác hostname với dịch vụ mong muốn và quy trình nghiệp vụ. Đường dẫn sau hostname hoặc biểu tượng kết nối đẹp không chứng minh tổ chức nhận tiền là đúng. Cũng không gửi mật khẩu qua HTTP rồi trông chờ chuyển hướng sẽ bảo vệ phần đã gửi.
Tên có khớp không? Với danh tính DNS, xem SAN loại dNSName; nếu URL dùng địa chỉ IP, cần SAN loại iPAddress phù hợp. Theo RFC 9525, không dựa vào CN thay SAN. Wildcard chỉ là toàn bộ nhãn ngoài cùng bên trái: *.example.test có thể khớp portal.example.test, không khớp example.test hoặc a.portal.example.test. Không dùng ví dụ wildcard một phần như por*.example.test làm quy tắc hiện hành.
Thời gian có hợp lệ không? Validity có notBefore và notAfter. Đồng hồ client sai có thể gây lỗi, nhưng không phải mọi cảnh báo thời gian đều do máy người dùng. Cần kiểm tra thời gian thực tế trước khi đề nghị chủ dịch vụ gia hạn. Không chỉnh lùi đồng hồ để làm chứng thư hết hạn được chấp nhận.
Client tin CA nào? Subject là chủ thể, issuer là bên cấp. Tên hai trường nối được chưa đủ: còn cần kiểm tra chữ ký và các điều kiện của đường dẫn tới trust anchor. Thiếu intermediate cũng có thể gây lỗi dù leaf chưa hết hạn. RFC 5280 mô tả kiểm tra đường dẫn; không phải mọi ứng dụng dùng cùng kho tin cậy.
Chứng thư dùng đúng mục đích không? Kiểm tra extensions liên quan như key usage và extended key usage. Thu hồi là phần của vòng đời; hành vi kiểm tra còn tùy ứng dụng và chính sách. Đừng mặc định mọi trình duyệt đều hỏi cùng dịch vụ OCSP trong mỗi lần truy cập hoặc cứ chưa hết hạn là luôn được chấp nhận.

Tài liệu Chrome chỉ cách xem trạng thái kết nối và nhắc kiểm tra đúng tên website. Biểu tượng, vị trí và câu chữ có thể thay đổi theo nền tảng, phiên bản. Không dạy người học rằng luôn phải có hình ổ khóa mới là HTTPS.
Firefox giải thích mã cảnh báo: lỗi hết hạn, unknown issuer hoặc bad certificate domain gợi các hướng kiểm tra khác nhau. Unknown issuer có thể liên quan thiếu chuỗi, CA nội bộ chưa được quản lý đúng hoặc thiết bị trung gian kiểm tra TLS. Không tự tắt phần mềm bảo vệ hay bỏ qua cảnh báo để phân biệt chúng.

Chỉ dùng môi trường lab riêng có Bash, OpenSSL, Python và curl. Chạy các khối theo thứ tự trong cùng terminal, không dùng khóa thật. Server chỉ nghe loopback; CA được chỉ định cho từng lệnh, không thêm vào trust store hệ thống. Các khóa không có mật khẩu chỉ phục vụ fixture dùng một lần.
umask 077
work=$(mktemp -d)
cd "$work"
openssl req -x509 -newkey ec \
-pkeyopt ec_paramgen_curve:prime256v1 -noenc \
-keyout ca.key -out ca.pem -days 10 \
-subj '/CN=LPI DEMO Root' \
-addext 'basicConstraints=critical,CA:TRUE' \
-addext 'keyUsage=critical,keyCertSign,cRLSign'
openssl req -new -newkey ec \
-pkeyopt ec_paramgen_curve:prime256v1 -noenc \
-keyout server.key -out server.csr \
-subj '/CN=lab.example.test'
cat > leaf.ext <<'EXT'
basicConstraints=critical,CA:FALSE
keyUsage=critical,digitalSignature
extendedKeyUsage=serverAuth
subjectAltName=DNS:lab.example.test
EXT
openssl x509 -req -in server.csr -CA ca.pem \
-CAkey ca.key -CAcreateserial -out server.pem \
-days 2 -sha256 -extfile leaf.ext
openssl verify -CAfile ca.pem -purpose sslserver \
-verify_hostname lab.example.test server.pem
Kỳ vọng server.pem: OK. CA 10 ngày và leaf 2 ngày chỉ là thông số bài tập, không phải chính sách cấp chứng thư công cộng. Kiểm tra ngoại tuyến này chưa chứng minh server đang sử dụng đúng tệp.
cat > server.py <<'PY'
import ssl, http.server
class Handler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
body = b'LPI-TLS-DEMO-29\n'
self.send_response(200)
self.send_header('Content-Length', str(len(body)))
self.end_headers()
self.wfile.write(body)
def log_message(self, *args):
pass
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ctx.minimum_version = ssl.TLSVersion.TLSv1_3
ctx.maximum_version = ssl.TLSVersion.TLSv1_3
ctx.load_cert_chain('server.pem', 'server.key')
srv = http.server.HTTPServer(('127.0.0.1', 8443), Handler)
srv.socket = ctx.wrap_socket(srv.socket, server_side=True)
srv.serve_forever()
PY
python3 server.py >server.log 2>&1 &
server_pid=$!
Chờ server khởi động trước khi gọi curl. Nếu gặp connection refused, kiểm tra server đã chạy rồi thử lại; chưa thể kết luận lỗi chứng thư. Nếu cổng 8443 đã bận, xem lỗi trong server.log và chọn cổng khác thống nhất cho bài tập; không dừng dịch vụ không thuộc lab. Đây là server học tập tối giản dùng SSLContext của Python, không triển khai ra Internet.
curl --noproxy '*' --connect-timeout 2 --max-time 3 \
--cacert ca.pem \
--resolve lab.example.test:8443:127.0.0.1 \
https://lab.example.test:8443/
Kỳ vọng LPI-TLS-DEMO-29. --resolve chọn địa chỉ kết nối trong fixture, vẫn giữ hostname URL để xác minh. curl xác minh chứng thư mặc định; --cacert chỉ định CA cho lần truyền này. --noproxy '*' giữ phép thử loopback khỏi proxy môi trường.
curl --noproxy '*' --connect-timeout 2 --max-time 3 \
--resolve lab.example.test:8443:127.0.0.1 \
https://lab.example.test:8443/
curl --noproxy '*' --connect-timeout 2 --max-time 3 \
--cacert ca.pem \
--resolve wrong.example.test:8443:127.0.0.1 \
https://wrong.example.test:8443/
Trong fixture đã chạy, lệnh đầu bị từ chối vì không tin CA; lệnh sau vì SAN không khớp tên. Cả hai trả mã 60, không nhận HTTP body. Không thêm -k để biến chúng thành thành công: khi đó bạn đã thay điều kiện đang cần kiểm chứng. Đọc chi tiết lỗi, vì mã 60 một mình chưa phân biệt hai nguyên nhân.
future=$(python3 -c 'import time; print(int(time.time())+3*86400)')
openssl verify -CAfile ca.pem -attime "$future" \
-purpose sslserver -verify_hostname lab.example.test server.pem
kill "$server_pid"
wait "$server_pid" 2>/dev/null || true
Kỳ vọng xác minh thất bại với certificate has expired: leaf 2 ngày đã hết hạn ở thời điểm giả định, root 10 ngày còn hạn. OpenSSL mô tả -attime là thời gian dùng khi kiểm tra, không thay đồng hồ hệ thống. Nếu script bật set -e, đặt lệnh lỗi mong đợi trong if và bảo đảm cleanup vẫn chạy.
Lab đã kiểm thử TLS 1.3 loopback, CA/tên đúng, hai lỗi curl và hạn dùng ngoại tuyến. Chưa kiểm thử cảnh báo giao diện trình duyệt, thu hồi, website thật hay phiên TLS sống với chứng thư hết hạn. Kết thúc bằng hủy môi trường dùng một lần và các khóa minh họa theo quy trình lab.
-attime có kiểm thử trình duyệt không? Không, đó là kiểm tra chứng thư ngoại tuyến bằng OpenSSL.
Học bảo vệ quyền riêng tư qua cookie, fingerprinting, hồ sơ và quyền dữ liệu; thực hành quan sát cookie trong lab riêng, phân biệt xóa cục bộ và log server.

Học giao tiếp an toàn qua phishing, tệp đính kèm, phân loại thông tin và quyền cloud; thực hành xác minh người nhận, giảm dữ liệu và xử lý chia sẻ nhầm.

Hiểu danh tính và xác thực với mật khẩu, MFA, passkeys và SSO; đối chiếu NIST 800-63B-4, thực hành salt và băm, lập đường khôi phục tài khoản phù hợp.

Phân biệt mã hóa mạng và ẩn danh với VPN, proxy, Tor và E2EE; đọc ranh giới bảo vệ, hiểu bút danh blockchain qua bốn tình huống thực hành giả định.