Openldap 和 SSL 證書鏈驗證
我剛剛使用簡單的 PKI 在一台伺服器上為 slapd 設置了 TLS,如下所示:
ldap 證書**<中間 CA 證書<**根 CA 證書
為了從客戶端使用 TLS 連接到 ldap 伺服器,我添加了,就像我發現的許多教程一樣,根 CA 證書和 ldap 證書到受信任的證書。
我能夠通過 TLS 連接到我的 ldap 伺服器
但是,為什麼不需要中間 CA 證書?它是否需要由 ldap 伺服器連同 ldap 證書一起發送?我只在我的 slapd 配置中配置了這些:
olcTLSCACertificateFile: /etc/ldap/ssl/root.pem olcTLSCertificateFile: /etc/ldap/ssl/ldap_crt.pem olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap_key.pem
而且似乎這些根和 ldap 證書文件中的每一個都只包含自己的證書。
我是不是誤會了什麼?為什麼它在客戶不知道中間 CA 證書是什麼的情況下工作?
完全擁有中間 CA 證書的原因是,根 CA 證書的私鑰可以保持離線狀態。
在正常的證書頒發機構設置中,根 CA 證書保持離線狀態,僅用於簽署中間 CA 證書,涉及武裝警衛、C 級員工和許多協議的罕見事件。中間 CA 私鑰保持線上狀態,用於簽署來自最終客戶的 TLS 證書請求。不可能維護那種協議來簽署每個最終證書。
在 CA 妥協的情況下,只需要替換中間 CA(以及由它簽名的證書);如果根 CA 遭到破壞,這幾乎會使 CA 停業,因為 CA 簽署的每個證書都需要更換。
此外,根 CA 必須存在於客戶端的信任庫中。客戶端決定它將接受哪些 CA 的證書,並將這些根 CA 證書保存在本地。擁有任意中間證書使 CA 在這方面具有更大的靈活性。因為它只是由根 CA 簽名,而不是根 CA,所以可以更容易地更改它(例如昇級到更安全的雜湊算法)。
在 TLS 協商期間,伺服器將發送其證書和簽署它的證書(如果不是根 CA),以及簽署該證書的證書*(*如果不是根 CA )。因為客戶端有根 CA 證書,伺服器不應該發送它。如果伺服器嘗試發送根 CA 證書,某些客戶端將拒絕連接。
在您的情況下,您沒有指定證書的來源或提供任何相關資訊,因此只能進行瘋狂的猜測。
如果它們來自私有 CA,則 TLS 證書可能已由根 CA 直接簽名,而不是由中間 CA 簽署。客戶端也可能在其信任儲存中具有中間體(儘管它不應該)。