證書與私鑰匹配器

貼上伺服器正在使用的證書和你準備與之一起部署的私鑰,本頁回答部署站點最常翻車的問題:這兩者是否來自同一對金鑰?答案不是靠模長或指紋的猜測 — 本頁用私鑰對一個固定挑戰簽名,再用證書內的公鑰驗證該簽名。驗證通過,兩者匹配;驗證失敗,再怎麼改配置也無法讓它們工作。兩側的讀取結果並排顯示演算法、金鑰長度、主體金鑰識別符號與公鑰指紋,你貼上的任何內容都不會離開瀏覽器。
1. 證書或證書鏈
可以貼上任意多個塊。每張證書都會與每把金鑰核對,因此一條證書鏈加一把金鑰就能準確告訴你那把金鑰屬於鏈中的哪張證書 — 伺服器從 bundle 裡發錯證書時常見的意外。PEM、裸 base64 或十六進位制正文以及 PKCS#7 .p7b 檔案都能讀取;金鑰確認之後,可用證書檢查器進一步審計證書本身。
2. 私鑰,或公鑰
PKCS#8(BEGIN PRIVATE KEY)、PKCS#1(BEGIN RSA PRIVATE KEY)、SEC1(BEGIN EC PRIVATE KEY)與裸 SPKI 公鑰(BEGIN PUBLIC KEY)都能識別,以 base64 或十六進位制貼上的金鑰檔案也可以。加密的 PKCS#8 金鑰(BEGIN ENCRYPTED PRIVATE KEY)瀏覽器無法讀取,會如實報告,並附上去掉口令的命令。
尚未檢查
示例是一張自簽名證書和屬於它的私鑰,兩者都為本頁專門生成,不保護任何東西。把金鑰換成任意其他金鑰可以看到另一種結論,或用公鑰塊替換私鑰塊來看公鑰匹配。
把私鑰貼上進任何網頁之前都值得三思。本頁是一個純 JavaScript 檔案,不從任何地方載入任何東西,也不發出任何請求,所以金鑰在本標籤頁內被讀取、使用然後遺忘。這仍然是你能讀懂的程式碼做出的承諾,而不是看得見的網路給出的保證:如果你在處理生產金鑰,請離線操作,並考慮最安全的檢查是在自己的伺服器上運行同樣的 openssl 命令。貼上到這裡的金鑰絕不會被儲存、絕不會被寫入檔案、絕不會被髮送到任何地方 — 包括匯出按鈕在內,它們只寫關於金鑰的結論,絕不寫金鑰本身。
為什麼簽名才是答案。兩個檔案可以看起來一樣卻仍是錯配:大多數指南用模數比較 RSA 金鑰,但那隻對 RSA 有效,而且一把金鑰可以帶著正確的模數卻配了損壞的指數或錯誤的填充。本頁用握手的方式來證明配對 — 用私鑰對固定挑戰簽名,用證書裡的公鑰驗證 — 因此結論對 RSA、ECDSA 和 Ed25519 同樣成立。當只貼上了公鑰一半時,會比較公鑰位元組本身,這對身份判定同樣結論明確,只是無法證明有人持有私鑰一半。

匹配不能告訴你什麼。它不能說明伺服器實際載入的就是這把金鑰、證書受信任、金鑰檔案在磁碟上完好,或金鑰沒有被別人複製。它也不能說明客戶端收到的是不是這張證書,因為站點前面的負載均衡器或 CDN 可能傳送另一張。要檢查線上伺服器真正呈現的內容,請執行 openssl s_client -connect example.com:443 -servername example.com -showcerts 並把輸出貼上到證書框。

檔案從哪裡來。證書是你的伺服器配置的那張,或從瀏覽器匯出、從 .p7b bundle 裡取出的那張。私鑰是你的 web 伺服器啟動時讀取的檔案,通常類似 privkey.pem 或 server.key。如果你的金鑰是加密的,先用 openssl pkcs8 -topk8 -nocrypt -in key.pem -out key-plain.pem 解密一份副本,貼上它,然後刪除副本。
尚未檢查。在上方貼上證書和金鑰並按檢查是否匹配。結論會連同其依據一起出現在這裡,報告可以複製或儲存。
在你自己的機器上用 openssl 做同樣的檢查
# 證書內的公鑰 openssl x509 -in cert.pem -noout -pubkey | openssl pkey -pubin -outform DER | openssl sha256 # 私鑰內的公鑰 openssl pkey -in key.pem -pubout | openssl pkey -pubin -outform DER | openssl sha256 # 只有兩者的摘要相等時,這對金鑰才匹配 # 較老的僅 RSA 方式:比較模數 openssl x509 -in cert.pem -noout -modulus | openssl md5 openssl rsa -in key.pem -noout -modulus | openssl md5
摘要比較適用於所有金鑰型別,與本頁報告的公鑰指紋一致;模數比較只存在於 RSA。兩者都證明不了有人持有私鑰一半 — 上面的簽名檢查可以,這正是本頁採用它的原因。
報告裡有什麼。結論、得出結論的兩側讀取結果(證書與金鑰各自的演算法、金鑰長度、曲線、主體金鑰識別符號與公鑰指紋),以及執行的確切測試。報告絕不包含私鑰本身:金鑰只被用來產生一個簽名,不會寫入文本、JSON 或剪貼簿。你複製或儲存的內容可以安全地附到工單裡;你貼上的金鑰不可以,並且你應當把剪貼簿當作它存在過的唯一另一個地方。

隱私:證書與金鑰都在標籤頁內讀取,不上傳任何內容,本頁完全不發出請求 — 沒有探測也沒有查詢。要建立一對匹配的金鑰請用自簽名證書生成器;要為已有金鑰申請證書請用CSR 生成器;要閱讀證書內容請用證書解碼器。