在不使用中間憑證的情況下,這個 ldapsearch 指令如何成功?

在不使用中間憑證的情況下,這個 ldapsearch 指令如何成功?

我有一個 LDAP 伺服器(Active Directory 網域控制器),其憑證由內部中間 CA 簽名,當然也由內部根 CA 簽署。我覺得我在這裡忽略了有關 PKI 的一些基本知識,因為我認為我需要客戶端上的中間 CA 和根 CA 檔案來與 LDAP 伺服器提供的憑證建立信任,所以我不明白為什麼這兩者命令成功。它們是相同的,只是第一個信任根 CA 和中間 CA,而第二個僅信任根憑證。我預計第一個命令會起作用,但第二個命令不會。 (我已經仔細檢查過,即使不使用,輸出也是相同的grep,並且 .crt 檔案的內容是正確的。)

我有什麼誤解嗎?

export LDAPTLS_CACERT=./chained.crt; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)" | grep result
Enter LDAP Password: 
result: 0 Success

export LDAPTLS_CACERT=./root_cert_only.crt; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)" | grep result
Enter LDAP Password:
result: 0 Success

# and just for fun, let's try it without trusting any CAs. it fails as expected.
export LDAPTLS_CACERT=''; ldapsearch -x -W -h ldap.example.com -p 389 -ZZ -D "[email protected]" -b "OU=users,OU=example,DC=com" "(cn=testuser)"
ldap_start_tls: Connect error (-11)
    additional info: TLS error -8179:Peer's Certificate issuer is not recognized.

注意:我慘痛地了解到,ldapsearchmacOS 上不支援透過環境變數中設定的路徑來信任憑證。上面的輸出來自linux(ldapsearch版本2.4.40)

答案1

第一個命令(同時使用根CA 和從屬CA)之所以有效,是因為您的客戶端明確信任根證書- 它位於信任錨存儲中- 並且此根已簽署從屬CA 證書,因此您的客戶端也隱式信任該憑證。

第二個指令有效是因為 TLS 規範狀態那個伺服器必須傳送驗證伺服器憑證所需的所有憑證。因此,您的 LDAP 伺服器會傳送其證書,然後傳送從屬 CA 憑證。

實際上,這兩個命令是相同的。在第一個範例中,用戶端從命令列和伺服器接收從屬 CA 憑證。

請注意,伺服器不需要傳送根證書,因為該證書必須已安裝在您的用戶端上並且受信任。

相關內容