2016-06-10 42 views
0

這裏還有一個傳統的支持問題!
我們有一個服務器多客戶端網絡,其中每個組件都有一個自簽名證書,並被添加到服務器/客戶端的信任存儲區。我們在這裏沒有使用證書頒發機構。
現在我們的問題是我們需要升級所有證書以獲得更好的安全性。新的客戶端將附帶較新的證書,甚至服務器也將擁有新的證書。
我們的問題是如何處理老客戶。升級老客戶的密鑰庫是最後的選擇。SSL:如何使用連接到相同端口的單獨密鑰處理多個客戶端?

的事情,是行不通的:

  1. 在服務器信任添加兩個新老證書:即使客戶端進行身份驗證的服務器和服務器證書,將不存在於客戶信任。

  2. 爲新客戶端使用新端口:我們考慮爲新客戶端使用新端口併爲舊客戶端繼續使用舊端口,但問題是存在多個應用程序正面臨此問題,因此我們必須搜索多個新端口未被其他產品使用。

FWIW:服務器在Java和客戶端是用C++ EJP的回答
我可能會問一個非常愚蠢的問題,在這裏只是想確認後

編輯。一旦套接字綁定,絕對沒有辦法編輯套接字的SSL上下文。正確?
另外,我們可以選擇在握手期間使用的服務器證書嗎?我知道chooseClientAlias()chooseServerAlias()方法,但我們不知道在發送客戶端Hello消息之前使用哪個證書。

回答

2

撇開使用不同的端口:

  1. (1)將作爲服務器所關注的是客戶端證書的工作遠。
  2. 沒有任何將使舊客戶端識別新服務器證書,而不是升級客戶端信任庫。

這就是爲什麼你應該使用一個CA,甚至一個內部,以及爲什麼你應該絕對不再次犯同樣的錯誤。如果客戶端直接信任CA而不是自簽名服務器證書,那麼您現在就不會有這個問題,並且您將來也不會有這個問題,但是很多時候您都會升級證書,直到CA證書過期,應該花20年時間。

當你在它的時候,確保你建立一個更新客戶端信任庫的方式。

一旦套接字綁定,絕對沒有辦法編輯套接字的SSL上下文。正確?

有沒有辦法來編輯SSLContext一旦它初始化,其先於插座的創作,更別說結合他們。嗯,也許你可以重新加載KeyManagerTrustManager,只是不告訴SSLContext,但我不是說它會(或不會)工作。

此外,我們可以選擇握手期間使用的服務器證書嗎?

是的,這就是KeyManager接口的用途,特別是chooseServerAlias()

我知道chooseClientAlias()chooseServerAlias()方法,但在這裏我們不知道要使用的證書,直到你好發送消息的客戶端。

chooseServerAlias在收到ClientHello之前不會被調用。

+0

我同意你關於使用CA的觀點。我已經用一個正在討論的線程更新了這個問題。你能回答嗎? – Limit

+0

我會嘗試chooseServerAlias()方法。我認爲這應該解決我們的問題。舊代理使用舊密鑰,新服務器使用新密鑰。至少在我們擁有CA架構之前。 – Limit

相關問題