Kiểm tra cấu hình HTTPS

Dán header phản hồi của một trang — và nếu bạn có, chứng chỉ, một đoạn mã nguồn trang và tên máy chủ — trang này báo cáo cách phía HTTPS được cấu hình: HSTS có được đặt không và trong bao lâu, chính sách bảo mật nội dung có nâng cấp yêu cầu không an toàn không, cookie có được đánh dấu Secure và SameSite không, một banner máy chủ có tiết lộ phiên bản không, và các header proxy nói gì về yêu cầu mà ứng dụng thực sự thấy. Chứng chỉ được kiểm tra trong cùng báo cáo, các tài nguyên phụ http:// thuần được đếm từ mã nguồn trang, và các lệnh có thể thấy quá trình bắt tay được liệt kê để bạn tự chạy. Mọi thứ chạy trong trình duyệt của bạn và trang không tự gửi yêu cầu nào.
1. Header phản hồi
Toàn bộ khối header phản hồi, kể cả dòng trạng thái. Nguồn dễ nhất: curl -sI https://example.com/ trong terminal, hoặc bảng Headers của tab Network trong developer tools của trình duyệt, sao chép từ đầu tệp. Các header thừa được đọc và bỏ qua; chỉ những header liên quan HTTPS được báo cáo.
2. Chứng chỉ hoặc chuỗi (tùy chọn)
Khi điền mục này, cùng báo cáo cũng mang theo toàn bộ kiểm tra chứng chỉ, nên cấu hình và chứng chỉ được đọc cùng lúc. PEM, thân base64 hoặc hexadecimal trần và .p7b PKCS#7 đều dùng được; bộ kiểm tra chứng chỉ đi sâu hơn vào chứng chỉ khi dùng riêng.
3. Đoạn mã nguồn trang (tùy chọn)
Dán mã nguồn trang (hoặc chỉ các thẻ có URL) và mọi địa chỉ http:// thuần sẽ được liệt kê, vì một tài nguyên phụ tải qua HTTP làm hỏng ổ khóa và có thể bị viết lại trên đường truyền ngay cả khi chính trang đến qua HTTPS. Các địa chỉ đến máy chủ của chính trang được nêu riêng, vì đó là những địa chỉ mà một URL tương đối sẽ sửa.
4. Tên máy chủ (tùy chọn)
Khi có tên máy chủ ở đây, kiểm tra sẽ đối chiếu các tên thay thế chủ thể như cách trình duyệt làm, kể cả quy tắc ký tự đại diện, và khớp các địa chỉ http:// thuần với chúng.
chưa kiểm tra gì
Mẫu cố ý không hoàn hảo, để mọi phần của báo cáo đều có nội dung: một khối header có HSTS và chính sách bảo mật nội dung (nhưng không có preload và một cookie không có SameSite), một chuỗi hai chứng chỉ, và một đoạn mã trang tải một script qua http:// thuần và trỏ một ảnh đến máy chủ của chính trang theo cách tương tự. Hãy kỳ vọng hạng F trên mẫu và đọc các phát hiện bên dưới để thấy mỗi phát hiện nghĩa là gì.
Những gì được kiểm tra. Từ khối header: HSTS, max-age của nó, includeSubDomains và preload; chính sách bảo mật nội dung nâng cấp yêu cầu không an toàn; các cờ Secure, HttpOnly và SameSite trên mọi Set-Cookie; một banner máy chủ nêu sản phẩm và phiên bản; và các header được chuyển tiếp cho biết ứng dụng có thấy yêu cầu là HTTPS không. Từ khối chứng chỉ: toàn bộ kiểm tra chứng chỉ, đến việc mỗi liên kết trong chuỗi có thật sự đã ký liên kết kế tiếp không. Từ mã nguồn trang: các tài nguyên phụ http:// thuần. Ba phần được báo cáo riêng rồi tổng hợp cùng nhau, vì ổ khóa bị hỏng thường là một trong ba phần đó chứ không phải hai phần kia. Với danh sách OWASP đầy đủ về header phản hồi bảo mật — X-Content-Type-Options, bảo vệ khung, Referrer-Policy, Permissions-Policy, COOP, COEP, CORP và điểm chấm — dán cùng khối header vào trang Kiểm tra Security Headers; hai trang chia công việc theo tầng TLS và tầng header.

Những gì nó không thấy. Trang này không bao giờ mở kết nối TLS. Trình duyệt không lộ quá trình bắt tay cho trang, nên phiên bản giao thức, bộ mật mã, nhóm trao đổi khóa, OCSP stapling, tiếp tục phiên, 0-RTT, chuỗi chứng chỉ mà một máy chủ đang chạy thực sự gửi, và việc chuyển hướng HTTP sang HTTPS xảy ra ở máy chủ gốc hay ở proxy, đều nằm ngoài những gì bất kỳ trang web nào báo cáo được. Nó cũng không thể liên hệ một bên thứ ba để thu thập header giúp bạn, và không thể cho bạn biết chứng chỉ có được tin cậy không, vì điều đó phụ thuộc kho gốc mà một trang không đọc được. Các lệnh bên dưới trang này thì thấy những thứ đó, và được thiết kế để bạn chạy trên máy của mình.

Lấy khối header ở đâu. Trong terminal, curl -sI https://example.com/ in ra đúng những gì trang này cần. Trong trình duyệt, mở developer tools, vào tab Network, tải lại trang, chọn yêu cầu tài liệu và sao chép toàn bộ vùng Response Headers, hoặc dùng Copy → Copy response headers. Để kiểm tra chuyển hướng, cũng chạy curl -sI http://example.com/ và dán cả hai khối; trang báo cáo chúng lần lượt.
Chưa kiểm tra gì. Dán một khối header ở trên và nhấn Kiểm tra cấu hình này để có báo cáo đầy đủ; chứng chỉ, một đoạn mã nguồn trang và tên máy chủ là tùy chọn và mỗi cái thêm một phần riêng.
Thăm dò khả năng truy cập — phần duy nhất của trang này dùng mạng
Một trang không thể mở kết nối TLS, nhưng có thể thử một yêu cầu thông thường. Nếu trang cho phép đọc đa nguồn, URL mà phản hồi cuối cùng dừng lại cho thấy http:// có được chuyển hướng sang https:// không, và đó là tất cả những gì điều này có thể chứng minh. Nếu yêu cầu thất bại, trang này không thể cho bạn biết máy chủ đã sập, kết nối của chính bạn đã sập, hay trang đơn giản không cho phép đọc đa nguồn — trường hợp sau là phổ biến nhất, vì hầu hết trang không gửi Access-Control-Allow-Origin. Một URL http:// được trả lời trước mọi chuyển hướng, nên đây là điều duy nhất ở đây mà trình duyệt sẽ thử trên kết nối thuần. Không gì rời khỏi trình duyệt cho đến khi bạn nhấn nút.
Các lệnh thực sự thấy quá trình bắt tay
curl -sI https://example.com/ # the header block this page reads curl -sI http://example.com/ # is plain HTTP answered, or redirected? curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' http://example.com/ openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null openssl s_client -connect example.com:443 -servername example.com -tls1_3 </dev/null 2>/dev/null \ | openssl x509 -noout -subject -issuer -dates -ext subjectAltName nmap --script ssl-enum-ciphers -p 443 example.com testssl.sh example.com # or: docker run --rm -ti drwetter/testssl.sh example.com
Đây là những lệnh bạn tự chạy, trên máy bạn kiểm soát, nhắm vào một máy chủ bạn được phép kiểm thử. Đầu ra -showcerts có thể dán thẳng vào bộ kiểm tra chứng chỉ, và đầu ra header dán lại vào trang này.
Chứng chỉ là một tài liệu công khai. Mọi chứng chỉ được tin cậy công khai đều được công bố lên nhật ký Certificate Transparency, nên bất kỳ tên máy chủ nào bên trong — kể cả tên nội bộ hay gõ nhầm mà một nhà cung cấp chứng chỉ công khai đã ký — đều có thể được tìm thấy bằng cách tra cứu các nhật ký đó. Chứng chỉ cũng mang các địa chỉ thu hồi mà bên phát hành chọn, và đôi khi các địa chỉ đó nêu tên một máy chủ nội bộ. Đó là lý do chứng chỉ mà CDN phục vụ không nói gì về máy chủ gốc: các tên trong đó thuộc về CDN. Nếu kiểm tra nêu ra một tên máy chủ bạn không ngờ, hãy coi nó là công khai và thay thế bất cứ thứ gì nó bảo vệ.

Quyền riêng tư: khối header, chứng chỉ và mã nguồn trang được đọc cục bộ và không bao giờ được tải lên, và không có yêu cầu nào được thực hiện trừ khi bạn nhấn nút trong phần thăm dò khả năng truy cập. Để tạo chứng chỉ của riêng bạn, dùng trình tạo chứng chỉ tự ký; để kiểm tra một khóa riêng có thuộc chứng chỉ không, dùng trình khớp chứng chỉ và khóa.