證書有什麼幫助?
我正在閱讀Mike Meyers 的網路書籍,它說證書是一個包含
- 公鑰,以及
- 簽名(公鑰的加密雜湊,用私鑰加密)。
我可以理解簽名有助於確保公鑰不被篡改。如果我向安全站點發出請求並獲得證書,那麼我會在一個證書文件中獲得一個公鑰和一個簽名。為了驗證證書是否完好無損,我使用公鑰(雜湊 #1)解密簽名,自己從頭開始對公鑰進行雜湊(雜湊 #2),並同意雜湊 #1 等於雜湊 #2。
但這真的有什麼好處嗎?中間人攻擊可以截取證書,用自己完整的證書替換,我不知道有什麼區別。檢查雜湊似乎是徒勞的,因為證書可能是由肇事者的私鑰簽署的,而不是我請求的網站上的那個。
顯然證書頒發機構解決了這個漏洞,但我看不出證書文件中的額外簽名會有什麼幫助。它是由 CA 自己的私鑰簽名的嗎?確切的保證是什麼?如果第一輪雜湊檢查不能排除中間人攻擊,那麼另一個簽名將如何提供幫助?
我可以理解簽名有助於確保公鑰不被篡改。
證書中包含很多其他資訊,這些資訊都是通過簽名來簽名的。一個 X.509 證書主要由一個叫做 TBSCertificate 的部分組成,它的字面意思是“待簽名的證書”。唯一不包括的部分是初始 ASN.1 SEQUENCE 和 - 當然 - 簽名本身。
成功的簽名驗證確實表明沒有任何資訊被篡改。但是,更重要的是,它也表明證書中的資訊被證書的頒發者認為是正確的。這就是啟用公鑰基礎設施 (PKI) 的原因。
如果我向安全站點發出請求並獲得證書,那麼我會在一個證書文件中獲得一個公鑰和一個簽名。
你通常會得到一個證書鏈,希望能通向信任錨。如前所述,證書包含的資訊遠不止公鑰和簽名。最後,接收到的數據通常只是在記憶體中處理;它可以儲存在文件中或記憶體,但不需要在文件中。
為了驗證證書是否完好無損,我使用公鑰(雜湊 #1)解密簽名,自己從頭開始對公鑰進行雜湊(雜湊 #2),並同意雜湊 #1 等於雜湊 #2。
如前所述,您擁有的部分是“待簽名”部分,其中包括公鑰。此外,簽名驗證與使用公鑰解密然後執行雜湊比較不同。
但這真的有什麼好處嗎?中間人攻擊可以截取證書,用自己完整的證書替換,我不知道有什麼區別。
這個想法是您建構從收到的證書鏈到信任錨的信任路徑。然後您驗證並驗證鏈中的每個證書。如果驗證和驗證都成功,那麼只有這樣您才能信任伺服器證書。
創建信任路徑和驗證證書通常比驗證簽名困難得多。
驗證包括例如:
- 檢查證書是否還在有效期內;
- 檢查證書是否未被 CA 撤銷(即使用 CRL 或 OCSP 檢查狀態);
- 檢查是否存在正確的數據元素,例如序列號、正確的策略、正確的(擴展的)密鑰用法。
對於 Web 伺服器,在證書中顯示伺服器的名稱(通常在主題備用名稱或簡稱為 SAN)中也非常重要。如果不檢查伺服器名稱,則證書基本上沒有任何價值:有效的任何伺服器/私鑰組合都可以用來進行身份驗證(例如,任何擁有自己站點的有效證書的人都可以冒充 Google)。
檢查雜湊似乎是徒勞的,因為證書可能是由肇事者的私鑰簽署的,而不是我請求的網站上的那個。
是的,但犯罪者不應擁有可用於建構信任路徑的證書和私鑰。只要不是這種情況,信任路徑創建或驗證就應該失敗。
顯然證書頒發機構解決了這個漏洞,但我看不出證書文件中的額外簽名會有什麼幫助。
這不是額外的**簽名,而是簽名。只有一個證書頒發機構頒發證書。PKI 基礎設施是一個樹形結構,通常在頂部有一個受信任的、自簽名的根證書。
它是由 CA 自己的私鑰簽名的嗎?
是,對的。
確切的保證是什麼?
好問題。保證是接收者是域中的所有實體都應該能夠建立到信任錨的信任路徑。對於這種 PKI,這通常是通過您的瀏覽器或作業系統傳遞的根證書的集合。該列表使用軟體更新保持最新。
此外,CA 使用他們的簽名承諾證書中的資訊是有效的。證書請求中的資訊是否有效的檢查由 CA 的子實體(稱為註冊機構 (RA))執行。最終證書由來自認證請求的資訊(包括公鑰和伺服器名稱)和 CA 添加的資訊(如有效期、證書撤銷列表的 URL 等)組成。
對於用於 TLS / HTTPS 的證書,CA 還應測試執行請求的實體是否擁有或至少控制伺服器。
如果第一輪雜湊檢查不能排除中間人攻擊,那麼另一個簽名將如何提供幫助?
重申:稱為簽名驗證(包括雜湊部分),只有一個簽名。TL;DR 是建立和驗證信任路徑將排除中間人攻擊。
一旦客戶端獲得了受信任的伺服器證書,伺服器仍然需要通過對已知數據(例如 TLS 中的會話數據)執行私鑰計算來表明它可以訪問私鑰。
對瀏覽器使用的 PKI 的一大批評是有很多根證書/信任錨。只有其中一個需要被破壞,系統才會失敗。眾所周知,Irianian 政府使用從現已失效的 CA (DigiNotar) 獲得的錯誤頒發的證書來對 Google 服務進行中間人攻擊。
對於專有通信,只為特定 CA 安裝信任錨是有意義的。