2017-10-06 197 views
1

有一個PKI,其中一個CA在我的網絡中頒發所有x509證書。 因此,在我的網絡中,所有服務器和客戶端都擁有來自我的CA的證書以及私鑰,這些證書都存儲在相應的密鑰庫中。每個服務器和客戶端都有鏈文件中的CA證書,可用於驗證TLS相互身份驗證正在進行時對等x509證書的信任鏈。一切都好。 假設我現在在我的網絡上有兩臺服務器和兩臺客戶機,我想確保Client_A和Server_A使用他們的x509證書通過TLS相互身份驗證成功,因爲Client_B和Server_B應該這樣做。 與此同時,我想確保Client_A和Server_B之間的TLS相互認證不會成功。 (在Client_B和Server_A之間也有效)。將TLS雙向認證限制爲特定的TLS證書

如何讓我的網絡中的服務器和客戶端不僅驗證信任鏈,還要尊重某種白名單?

也許這在TLS Layer上不可行,這就是我想澄清的。

回答

2

可以實現此使用任何低於2 approaches-

  1. 在TLS層驗證客戶端證書:創建爲每個客戶端組單獨的中間頒發CA。例如,對於Server_A的所有客戶端,創建一個名爲Ca_Client_A的CA.所以你的鏈看起來像rootCA - > Ca_Client_A - >客戶端證書。將此Ca_Client_A導入Server-A的信任存儲區中。現在,Server_A將允許連接到發出ca_Client_A的客戶端。同樣,您可以創建Ca_Client_B中間CA由服務器B.

  2. 服務B客戶端組在應用層驗證客戶端證書:對於這一點,你需要編寫驗證邏輯在應用服務器中,你需要把約束如允許的客戶端證書序列號或CN名稱與關鍵字匹配,以便成功驗證。

希望有所幫助。

1

沒有任何方法(我知道)在TLS層執行此操作。

大多數TLS庫在證書交換期間提供回調選項,並且這將是根據列表檢查證書的適當位置。返回特定於庫的故障/不可接受版本通常會導致TLS握手失敗,並且不會傳輸任何數據。

0

很多這取決於您使用的服務器軟件,而不是TLS標準本身。一些軟件包可以配置爲信任由特定CA證書頒發的證書。在您的方案中,這將允許由您的CA頒發的任何證書連接到配置爲信任您的CA證書的任何服務器。其他服務器軟件可以配置爲信任特定證書,或具有給定主題的證書(可分辨名稱,subjectAltName等)。因此,它取決於您嘗試連接的特定「服務器」。這是一個Apache Web服務器嗎? IIS? Tomcat的?答案因我們所談論的服務器平臺而異。