憑證透明度搜尋

為某個網域簽發的每一張公開信任憑證都會寫入公開日誌——這個搜尋把它們讀回來給你看。輸入一個網域,查看 crt.sh 為它及其子網域記錄了什麼:每張憑證由誰簽發、涵蓋哪些名稱、何時有效。這就是能找出你遺忘的憑證——以及你從未申請過的憑證——的稽核。

想持續監控?用 myeventwatch 免費監控——到期和停機提醒,無需綁卡。

這個搜尋測什麼

憑證透明度把憑證簽發從一筆私下交易變成了一份公開記錄。當憑證頒發機構為某個公開名稱簽發憑證時,它會把憑證提交到幾個 CT 日誌,瀏覽器會拒絕沒有記錄的憑證。由此帶來的副作用是給防禦者的一份禮物:每個網域的完整簽發歷史都擺在公開之處,等著被讀取。本頁會呼叫 sysosx 伺服器上的 GET /api/check/cert-search,它向 crt.sh——那些日誌的公開索引——發出一次請求,查詢該網域及其之下的全部內容,對答案做規範化處理,按最新優先排序,並快取一小時。最多顯示 200 筆;超過這個數量的網域會得到截斷提示和真實總數,絕不會悄悄截斷。

把結果當作一份清單來讀,而不是一份裁決。對每一筆記錄,有價值的問題是「我們的哪個系統申請了它?」現代系統從比其所有者意識到的更多地方簽發憑證:網站主機、CDN、郵件服務商、行銷團隊的建站工具、某人去年搭起的叢集上的 Kubernetes ingress。其中大多數都是合法的,有幾筆對你來說仍然是新聞——這本身就有用,因為一份你從未見過的憑證清單不可能成為任何人的續期或撤銷計畫的一部分。最重要的是那些沒人能對應到某個系統的條目:未知的簽發者、未知的子網域、附近沒有任何部署的簽發日期。它們很少見,而這正是 CT 設計要揭示的東西。

三個工具,三個問題

這個搜尋回答「曾經簽發過什麼?」。SSL 檢查器透過一次即時交握回答「伺服器現在出示的是什麼?」——這是知道訪客實際得到什麼的唯一方法。SSL 評級器回答「那台伺服器的 TLS 設定得怎麼樣?」——通訊協定版本、前向保密、HSTS,並給出字母評級。而瀏覽器端的SSL 憑證解析器讀取你已經持有的憑證檔案。一張存在於日誌中但從未部署的續期憑證會出現在這個搜尋裡,而不是檢查器裡;一台出示舊憑證的伺服器會出現在檢查器裡,而不是這裡。當它們不一致時,各自說的都是自己的真相——用與你的問題相符的那個。

常見問題

用一段話說,什麼是憑證透明度?

自 2018 年起,瀏覽器要求公開信任的憑證發布到憑證透明度(CT)日誌中——那是 CA 簽發的每一張憑證的公開、只能附加的列表。這些日誌的存在是為了讓錯誤簽發無處藏身:如果出現一張你從未申請過的、屬於你的網域的憑證,任何查看的人都能看到它,包括你。這個工具透過 crt.sh——那些日誌最知名的公開索引——替你查看。

這與 SSL 檢查器和 SSL 評級器有什麼不同?

是三個不同的問題。SSL 檢查器問的是伺服器現在、在一次即時交握中出示什麼憑證。SSL 評級器稽核那台伺服器的 TLS 設定方式——通訊協定、加密套件、HSTS——並給它評級。這個搜尋問的是,根據公開日誌,曾經為這個網域簽發過什麼。它能揭示即時工具發現不了的憑證:被遺忘的預發布憑證、來自你的組織已不再使用的 CA 的憑證,以及——CT 正是為這種情況而建的——你的團隊裡根本沒人申請過的憑證。

為什麼這個搜尋從伺服器運行,而不是在我的瀏覽器裡?

本站瀏覽器端的憑證解析器也提供 crt.sh 查詢,並且明確說明它能否運作取決於 crt.sh 的跨來源回應標頭——瀏覽器只能讀取第三方服務允許它讀取的內容。伺服器端請求不需要滿足任何跨來源政策,所以這裡的搜尋每次都以相同方式運作。代價是通常的那一個:你輸入的網域會從 sysosx 的伺服器傳送到 crt.sh(並且答案會被快取一小時),頁面對此如實說明,而不是隱藏。

我看到不認識的憑證。應該驚慌嗎?

還不用。大多數陌生的條目都很平常:託管服務商或 CDN 替你簽發(Cloudflare、負載平衡器、建站工具)、你的組織已經棄用的憑證頒發機構,或者某人設定後遺忘的自動續期系統。按簽發者和日期逐筆核對清單,把每一筆對應到你運行的系統或你付費的服務商。驚慌——好吧,緊急調查——是留給剩下的那些的:一張來自沒人使用的 CA、涵蓋沒人運行的名稱、在沒人部署過任何東西的時間簽發的憑證。那要麼是你自己資產中一個值得記錄的被遺忘角落,要麼正是 CT 存在要抓到的錯誤簽發,應該追查到解釋清楚為止。

為什麼結果要快取一小時,為什麼搜尋可能失敗?

因為 crt.sh 是一個免費的公共服務,負載高時出了名的慢,而憑證歷史是按天而不是按分鐘變化的——快取一小時在新鮮度上沒有任何損失,還能避免這個工具加重 crt.sh 的負擔:每個網域每小時最多一次上游查詢。當 crt.sh 宕機或太慢時,搜尋會用明確的錯誤說明這一點,而不是傳回一個空列表,因為「沒有找到憑證」和「日誌搜尋失敗」是相反的結論,只有一個是真的。