在 SSH 中使用 X.509 而不是 PKI 有什麼缺點
ssh 使用公鑰進行身份驗證,而不是簽名的 X.509 證書。指定一個缺點,即使用 X.509 證書而不是公鑰。
我試圖查找很多不同的東西,但證書似乎在各個方面都優越。
根本區別在於如何(以及是否)驗證客戶端和伺服器身份。
在 X.509 中,密鑰通過由受信任的證書頒發機構頒發來進行身份驗證。當客戶端開始時對伺服器的身份一無所知,並且伺服器不需要了解客戶端的身份時,這使得它很容易使用。但是當客戶端還需要對伺服器進行身份驗證時,管理起來可能是一個特別的噩夢。
在 SSH 中,密鑰是自生成的(與自簽名 X.509 證書類似,但不一樣),並通過指紋進行身份驗證,指紋必須在帶外傳輸。這使得在兩端都被合理信任的情況下更容易使用。SSH 還具有內置的相互身份驗證。客戶端通過其主機密鑰驗證伺服器的身份(伺服器 X.509 在 TLS 中所做的),伺服器通過 authorized_keys 文件中的條目(相當於 X.509 客戶端證書)驗證客戶端的權限。
SSH 主要用於組織內的內部通信,其中兩端至少在某種程度上是受信任的。生成和分發 X.509 證書的成本會給許多案例帶來嚴重的負擔(想想在開發環境中每天啟動測試伺服器!)。
它還被設計為不依賴於目標名稱(因此您可以在大多數情況下使用 DNS 名稱,如果您的 DNS 系統由於某種原因出現故障,則可以使用 IP 地址)。
也就是說,您實際上可以將 SSH 配置為使用 X.509 證書。不過,據我了解,它只使用公鑰和私鑰,而忽略了證書的其餘部分。
您還可以通過將 SSHFP 記錄添加到您的 DNS 來獲得帶有 SSH 的 X.509 證書的大部分好處(這很重要,因為您首先必須啟用 DNSSEC)。使用 SSHFP 記錄,有人可能會說您實際上比使用 X.509 的狀態更好,因為您可以獲得經過身份驗證的主機密鑰的好處,而無需依賴有點損壞的證書頒發機構信任模型。
底線:SSH 機制和 X.509 是為不同的場景設計的。兩者在各自的利基市場中都相當安全。
OpenSSH 支持證書身份驗證——它已經使用了大約十年——但不使用 X.509。它使用自定義(更簡單)的證書格式。我的理解是,這個選擇是出於非技術原因(即,因為 X.509 帶有很多包袱和不必要的複雜性)。
使用基於證書的身份驗證的最大缺點是您需要執行證書頒發機構並管理證書。我的理解是,簡單的公鑰身份驗證(沒有證書的密鑰對)的最初動機是在首次使用時信任(您可以在不知道其公鑰的情況下連接到伺服器),是為了讓 SSH 在剛出現時更容易採用在現場,並試圖取代 telnet。
如今,使用基於證書的身份驗證有很多優點,並且它修復了 SSH 工作流程中一些更煩人和不安全的部分。如果您有興趣,這是我寫的一篇博文,其中包含更多關於 SSH 證書的資訊。