Ssl

伺服器或客戶端是否應該能夠驗證客戶端/伺服器證書 - 具有已知根 CA 的中間證書鏈?

  • August 2, 2017

我正在嘗試測試以下設置:

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,但我必須知道這是否也有效。

現在我的問題:

  1. 公鑰是由伺服器/客戶端證書和中間證書組成的鍊是否合法?
  2. 如果是這樣,這是否適用於雙方(伺服器和客戶端)?
  3. 如果伺服器(如 FreeRADIUS)或客戶端從對方收到它們,是否應該能夠使用根證書驗證此類鏈?

根據我的經驗,FreeRADIUS 不會驗證這樣的證書鍊是否正確。如果我沒記錯的話,FreeRADIUS 使用 OpenSSL 庫並在上面顯示的情況下執行與以下命令相同的操作:

openssl verify -CAfile rootcert.pem clientcert_intermediatecert_chain.pem

而且我很確定這不起作用。OpenSSL 無法使用根證書驗證這樣的鏈。嘗試將信任鏈放在一起時失敗。

它是否正確?

順便說一句,FreeRADIUS 返回與驗證命令相同的錯誤:error 20 at 0 depth: cannot find issuer certificate這意味著它無法將信任鏈放在一起。

  1. 是的,可以使用具有公共中介 CA 的鏈。
  2. 是的。
  3. 是的,確實如此。您需要發布 FreeRADIUS 的調試輸出。說它返回“錯誤 20”是沒有幫助的。這可能不是 FreeRADIUS 錯誤,而是 OpenSSL 的輸出。

我的設置的問題似乎是,客戶端沒有發送完整的客戶端中間鏈,而只發送了客戶端證書(使用 Wireshark 解決)。相反,radius 伺服器發送一個伺服器中間鏈,工作正常。

所以,回答我的問題:是的,這個設置應該在兩個方向都有效

引用自:https://serverfault.com/questions/859890