伺服器或客戶端是否應該能夠驗證客戶端/伺服器證書 - 具有已知根 CA 的中間證書鏈?
我正在嘗試測試以下設置:
RADIUS 伺服器使用 EAP-TLS 協議。客戶端和伺服器具有以下證書:
客戶端
公鑰:
clientcert_intermediatecert_chain.pem
CA 證書:
rootcert.pem
伺服器
公鑰:
servercert_intermediatecert_chain.pem
CA 證書:
rootcert.pem
客戶端證書 (
clientcert.pem
) 和伺服器證書 (servercert.pem
) 都由同一個中間證書 (intermediatecert.pem
) 簽名,中間證書 ( ) 由根證書 (rootcert.pem
) 簽名。設置為公鑰的兩條鏈像這樣放在一起(通過 Shell 命令):
cat servercert.pem intermediatecert.pem > servercert_intermediatecert_chain.pem
cat clientcert.pem intermediatecert.pem > clientcert_intermediatecert_chain.pem
現在,客戶端嘗試連接到伺服器。雙方發送他們的公鑰並嘗試驗證收到的公鑰
rootcert.pem
我知道“正常”的方式是,公鑰只是伺服器或客戶端證書。CA 證書將是 imcert-rootcert-chain,但我必須知道這是否也有效。
現在我的問題:
- 公鑰是由伺服器/客戶端證書和中間證書組成的鍊是否合法?
- 如果是這樣,這是否適用於雙方(伺服器和客戶端)?
- 如果伺服器(如 FreeRADIUS)或客戶端從對方收到它們,是否應該能夠使用根證書驗證此類鏈?
根據我的經驗,FreeRADIUS 不會驗證這樣的證書鍊是否正確。如果我沒記錯的話,FreeRADIUS 使用 OpenSSL 庫並在上面顯示的情況下執行與以下命令相同的操作:
openssl verify -CAfile rootcert.pem clientcert_intermediatecert_chain.pem
而且我很確定這不起作用。OpenSSL 無法使用根證書驗證這樣的鏈。嘗試將信任鏈放在一起時失敗。
它是否正確?
順便說一句,FreeRADIUS 返回與驗證命令相同的錯誤:
error 20 at 0 depth: cannot find issuer certificate
這意味著它無法將信任鏈放在一起。
- 是的,可以使用具有公共中介 CA 的鏈。
- 是的。
- 是的,確實如此。您需要發布 FreeRADIUS 的調試輸出。說它返回“錯誤 20”是沒有幫助的。這可能不是 FreeRADIUS 錯誤,而是 OpenSSL 的輸出。
我的設置的問題似乎是,客戶端沒有發送完整的客戶端中間鏈,而只發送了客戶端證書(使用 Wireshark 解決)。相反,radius 伺服器發送一個伺服器中間鏈,工作正常。
所以,回答我的問題:是的,這個設置應該在兩個方向都有效。