2016-01-27 48 views
0

我們目前有4個內部服務器通過nginx服務器進行負載平衡。我們所有的客戶都通過當前的Https連接並與我們的服務對話(由負載均衡器提供)。情況並非總是如此。因此,我們在maven設置中發現了一些創新的驗證代碼,其中包括antrun在構建時生成密鑰對,以便服務器可以通過公鑰發送用戶的證書並將其發送回服務器。如何在Java中生成非安全的KeyPair?

問題是我討厭這邊加載antrun過程,這使得很難使用其他工具來對付這個項目,它總是似乎在最不方便的時刻蠕動並咬我。

由於其他服務仍在使用需要密鑰對的舊認證方法,我不能將其移除並將其向前移動。至少現在我必須支持它。由於我的服務是負載平衡的,我還必須保持平衡器後面的所有服務器之間的密鑰對同步。

對於整個長篇大論的過程,我想這樣做

KeyPair pair = createPredictableKeypairFromThisString("mySecret!"); 

我如何能做到這一點,同時保持了向後兼容性有什麼建議?盡我所能,真正實現這一點的唯一方法是僞裝一個SecureRandom對象來釋放可預測的字節。我寧願不必做那樣的事情。

+0

你需要什麼樣的KeyPair?你能改變算法嗎? ECC密鑰相對容易從密碼短語確定性地推導出來。 – Thilo

回答

3

簡單地生成一個KeyPair,任何KeyPair。

將其序列化爲ByteArrayOutputStream。

將生成的字節數組轉換爲BASE64 blob-o-text。

將blob-o-text寫入代碼中的東西。

在運行時,將BASE64轉換爲字節數組。

從ByteArrayInputStream中讀取KeyPair,並返回KeyPair。

你也可以用常量創建一個靜態字節數組,所以做你喜歡的任何事情。

+0

良好而實用的解決方案。 – Thilo

+0

不錯。這將工作得很好。我偶然發現的另一個解決方案(IE,我第一次讀錯了文檔)是我可以將密碼設置爲SecureRandom對象的種子。它需要一個'byte []'種子,並且從一次運行到下一次運行都是一致的。 – Cogman