2016-07-07 122 views
1

2016年7月8日更新。如何實現通過SSL進行Web服務通信的Web服務?

我必須通過SSL實現Web服務到Web服務通信。這個要求就像我們有一個在Eclipse Virgo服務器上運行的應用程序。該應用程序包含少量OSGI軟件包。目前,當用戶輸入一些數據來存儲應用程序接受它並將數據持久化到基於實體的異構數據源(數據庫,使用JNI的C進程)並且這工作正常。

現在我需要實現的是,同一個應用程序將被部署在多個服務器中,並且在UI中將會有一個選項來指定複製服務器(即運行相同應用程序的服務器和需要複製的數據)。

爲此,我們計劃創建一個單獨的包以具有Restful Web服務並移動所有持久性邏輯以將數據保存到異構數據源。該Rest API將檢查可用的複製服務器,並且必須將相同的數據與Rest服務一起傳遞到這些服務器中。

需要指出的一點是,我們利用Spring Security框架來確保我們的java應用程序的安全性。由於我們不向任何第三方應用程序公開我們的Web服務,因此所有呼叫(包括對Web服務的調用)都將使用此服務進行身份驗證和授權。

我們不這樣做的負載平衡。每個服務器都是獨立的,我們使用安裝程序應用程序連同所需的軟件一起安裝應用程序。這個想法是使用安裝程序創建並安裝自簽名證書。在安裝應用程序時,我們可能不知道我們是否需要將其複製到另一臺服務器。因爲不是此應用程序的每個客戶端都需要複製服務器。需要使用複製服務器的客戶端必須能夠在稍後階段通過Java Web應用程序管理屏幕啓用和禁用一個或多個複製服務器。從那裏開始,一臺服務器上發生的數據操作需要以雙向的方式複製到其他服務器上。

所以我的問題是我們如何動態地獲取公鑰並加密請求以便在SSL中運行後以雙向方式連接到這些複製服務器?

我對SSL的概念完全陌生。

在此先感謝。

回答

1

如果您使用可信CA頒發的證書,則不需要額外的配置。但我想你會使用自簽名證書,因爲你有多個服務器,並且它們的使用不是公開的

每臺服務器都需要自己的SSL證書綁定到服務器的IP或主機名。我建議爲根頒發的每個服務器證書創建一個根證書和一個SSL證書。也可以使用通配符類型* .domain.com。

您必須將根證書包含在客戶端應用程序的信任庫中以實現成功的SSL連接。要做到這一點創建JKS密鑰存儲包含根證書和定義信任存儲如下

System.setProperty ("javax.net.ssl.trustStore","path/to/your/truststore"); 
System.setProperty ("javax.net.ssl.trustStorePassword", "password"); 

您可以在jre/lib/security/cacerts

還可以修改默認的信任。如果你需要一些步驟的詳細內容,請評論

EDITED

創建和分發證書,您可以評估幾個選項

1)通配符證書* .domain.com

它允許多個服務器共享使用同一證書的域。證書將包含在安裝程序中,並且公共部分將放入客戶機的密鑰庫中。新的複製服務器不需要客戶端上的其他配置。我認爲它不適用,因爲您可能不控制複製服務器的DNS。

2)無根CA

每個服務器生成自己的自簽名證書自簽名證書。然後,客戶必須信任該證書,方法是將其包含在trustore中。 通常我不會推薦自動下載過程,因爲它涉及連接到一個不安全的源(現在),從ssl連接獲取證書X509,打開信任庫並添加一個新證書,但由於有一個操作員明確地執行操作,我認爲這是可行的

檢查答案在這裏https://stackoverflow.com/a/37861267/6371459顯示如何創建一個自定義TrustManager依靠主機。在此之後打開信任庫文件在你的服務器上,添加證書並保存(見Programmatically Import CA trust cert into existing keystore file without using keytool

3)自簽名證書根CA

該證書在客戶端上創建的,但由您的PKI簽署(使用公鑰基礎設施)。優點是您的客戶端只需將根CA包含在信任庫中。每當您使用由此根CA頒發的證書時,都會信任新的複製服務器。

出於安全原因,您不應該在安裝程序中包含CA證書的私鑰。那麼,現在證書的創建將變得更加複雜。以前的一種選擇是爲新主機名創建證書並將其與安裝程序一起發送。另一個選擇是創建一個PKI基礎結構,並帶有一個負責簽署證書的服務器

+0

我能動態地做到這一點嗎?因爲我們計劃通過UI爲應用程序的超級管理員用戶指定複製服務器。 – Leejoy

+0

如果您將根CA包含在frontendserver的信任庫中,則新複製不會影響此部分。對於複製後端,您需要綁定到IP或複製過程中必須包含的服務器主機名的證書。您每次都要新建一個新證書,從可用的預建列表中選擇一個,或者爲所有服務器使用通配符 – pedrofb

+0

我已更新我的問題。 – Leejoy