2011-09-12 35 views
0

我有一個部署在需要雙向SSL身份驗證的SUNWappserver上的webapp-1。我可以爲它編寫一個Java客戶端1,它工作得很好。兩個WebApps之間的SSL握手

但是,當我爲webapp-1編寫客戶端-2作爲web服務(而不是獨立的java程序)時,我遇到了問題。

我在jetty-8服務器上部署client-2。在SSL握手過程中,Jetty首先從SUNWappserver獲得證書(可以:找到可信證書),然後Jetty從SUNWappserver(以及證書頒發機構)接收證書請求。但是,Jetty只是回覆一個空的證書鏈。

. 
. 
*** CertificateRequest 
Cert Types: RSA, DSS 
Cert Authorities: 
****<CNs removed from here>**** 
*** ServerHelloDone 
*** Certificate chain 
*** 
*** ClientKeyExchange, RSA PreMasterSecret, TLSv1 
. 
. 

我不確定發生了什麼。是否需要啓用jetty-ssl.xml配置中的某些設置,以便使用證書鏈答覆?下面是我使用的是現在

<Set name="KeyStore"><SystemProperty name="jetty.home" default="." />/server-certs/keyStore.jks</Set> 
<Set name="KeyStorePassword">$PASS</Set> 
<Set name="KeyManagerPassword">$PASS</Set> 
<Set name="TrustStore"><SystemProperty name="jetty.home" default="." />/server-certs/trustStore.jks</Set> 
<Set name="TrustStorePassword">$PASS</Set> 
<Set name="certAlias">$CORRECT_ALIAS</Set> 
<Set name="wantClientAuth">true</Set> 

我的信任庫,然後密鑰庫中的選項罰款,因爲他們當我使用客戶端作爲一個獨立的Java應用程序(而不是部署碼頭服務器)上運行。當我啓動Jetty服務器時,Jetty正確讀取keyStore和trustStore。我也嘗試在啓動Jetty服務器時給予-Djavax.net.ssl.trustStore等作爲jvm選項。

回答

0

剛剛弄清楚發生了什麼事。 我在客戶服務器上部署的客戶端2是一個cxf客戶端。原來,除了在jetty-ssl.xml中設置keyStore和trustStore之外,我還需要爲它設置cxf(在java代碼中或使用cxf.xml)

否則,客戶端(部署在碼頭服務器上)未發出任何錯誤消息(例如,未找到cxf keyStore等),只是將空白證書鏈發送回SUNWappserver。某種信息會有助於找出原因。

在相關說明中,我們還應該在jetty-ssl.xml中設置以下內容。

<Set name="needClientAuth">true</Set> 

否則,即使客戶端(即連接到Jetty服務器)發出錯誤的證書到碼頭服務器的空白,服務器將忽略並不會給出任何錯誤消息。