HTTPS 配置審計
貼上站點的響應頭——如果有的話,再加上它的證書、一段頁面原始碼和主機名——本頁報告 HTTPS 一側的配置:HSTS 是否設定及有效期、內容安全策略是否升級不安全請求、Cookie 是否標記了 Secure 和 SameSite、伺服器橫幅是否洩露版本,以及代理頭顯示應用實際看到的請求。證書在同一報告中審計,明文 http:// 子資源從頁面原始碼中統計,能看見握手的命令也為你列出供自行執行。一切都在瀏覽器中執行,本頁自己不發任何請求。
檢查什麼。從響應頭塊:HSTS 及其
max-age、
includeSubDomains 和
preload;升級不安全請求的內容安全策略;每條
Set-Cookie 上的
Secure、
HttpOnly 和
SameSite 標誌;寫明產品和版本的伺服器橫幅;以及告訴你應用是否把請求視為 HTTPS 的轉發頭。從證書塊:完整的證書審計,直到鏈上每一環是否真的簽署了下一環。從頁面原始碼:明文
http:// 子資源。三者分開報告再合併總結,因為壞掉的掛鎖通常是三者之一而非另外兩個。要檢視 OWASP 完整的安全響應頭清單——X-Content-Type-Options、框架保護、Referrer-Policy、Permissions-Policy、COOP、COEP、CORP 及分級評分——請把同一段響應頭貼上到
安全響應頭檢查 頁;兩頁按 TLS 層和響應頭層分工。
它看不到什麼。本頁從不開啟 TLS 連線。瀏覽器不向頁面暴露握手,所以協議版本、加密套件、金鑰交換組、OCSP 裝訂、會話恢復、0-RTT、執行中的伺服器實際傳送的證書鏈,以及 HTTP 到 HTTPS 的重定向發生在源站還是代理,都在任何網頁能報告的範圍之外。它也無法訪問第三方站點替你收集響應頭,也無法告訴你證書是否受信任,因為那取決於頁面讀不到的根儲存。本頁下方的命令能看到這些,它們是留給你在自己的機器上執行的。
從哪裡獲取響應頭塊。終端裡
curl -sI https://example.com/ 列印的正是本頁要的內容。瀏覽器裡開啟開發者工具,到 Network 標籤,重新整理頁面,選中文件請求並複製整個 Response Headers 區域,或用
複製 →
複製響應頭。重定向檢查請同時執行
curl -sI http://example.com/ 並把兩段都貼上進來,頁面會先後報告。
尚未審計。在上方貼上響應頭塊並按審計此配置檢視完整報告;證書、頁面原始碼片段和主機名都是可選的,每項都會增加自己的區塊。
可達性探測 — 本頁唯一使用網路的部分
頁面無法開啟 TLS 連線,但可以嘗試一次普通請求。如果站點允許跨源讀取,響應最終到達的 URL 能顯示 http:// 是否被重定向到 https://,這也就是它能證明的全部。如果請求失敗,本頁無法告訴你主機宕機了、你自己的連線斷了,還是站點只是不允許跨源讀取——最後一種最常見,因為多數站點不傳送 Access-Control-Allow-Origin。http:// URL 在任何重定向之前就被應答,所以這是這裡唯一會讓瀏覽器在明文連線上嘗試的事。在你按下按鈕之前什麼也不會離開瀏覽器。
能看見握手的命令
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
這些命令是留給你在受你控制的機器上、對你有權測試的主機執行的。
-showcerts 的輸出可以直接貼上進
證書檢查器,響應頭輸出則可以粘回本頁。
證書是公開檔案。每張公共受信任的證書都會發布到證書透明度日誌,所以證書內的任何主機名——包括被公共證書頒發機構簽署的內部名稱或打錯的名稱——都可以通過搜尋這些日誌找到。證書還攜帶其頒發者選擇的吊銷地址,而這些地址偶爾會寫內部主機名。這就是 CDN 服務的證書說明不了源伺服器的原因:其中的名稱屬於 CDN。如果審計翻出了你沒預料到的主機名,把它當作公開的,並更換它保護的東西。
隱私:響應頭塊、證書和頁面原始碼都在本地讀取、從不上傳,除非你按下可達性探測裡的按鈕,否則不會發出任何請求。要建立自己的證書請用
自簽名證書生成器;要檢查私鑰是否屬於某張證書請用
證書與金鑰匹配器。