2011-08-25 142 views
3

我是一名工程學生,正在實習。我必須創建一個Web服務。它必須:版本服務錯誤,在Tomcat上安裝Axis2乾淨安裝

  • 使用HTTPS
  • 用gzip以壓縮HTTPS數據
  • 使用SOAP/WSDL

我以前從來沒有開發的Web服務。我選擇了Tomcat + Axis來開發這個項目。

我的操作系統是Windows 7,我已經安裝了Tomcat 6.0並配置了HTTPS,當我嘗試通過瀏覽器訪問Tomcat時,它工作正常。我還配置了Gzip壓縮服務器。

接下來,我嘗試安裝Axis,因此我下載了axis1.5.4.war並將其部署到服務器上。隨着我的瀏覽器,我能夠訪問軸「歡迎頁面」成功,但是當我點擊「驗證」,我得到這個:

有在Axis2的版本服務有問題,可能是服務不可用或有些事情出錯了。但這並不意味着系統無法正常工作!嘗試上傳其他服務並檢查它是否正常工作。 [原文]

爲了解決這個問題,我修改每this documentation我的服務器上的軸conf文件。

我得到這個我的Eclipse控制檯上:

[INFO]無法sendViaPost到網址[https://開頭本地主機/ Axis2的/服務/版本] org.apache.axis2.AxisFault:連接已被關閉:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路徑建設失敗:sun.security.provider.certpath.SunCertPathBuilderException:無法找到請求的目標的有效證書路徑

如何我解決這個問題嗎?

回答

0

你得到這個是因爲你用來保護axis2服務的證書不可信。您需要導入公共證書或簽署的密鑰存儲區,並設置以下兩個系統屬性的CA證書 - 在您的客戶端代碼

System.setProperty("javax.net.ssl.trustStore", "path/to/keystore"); 
System.setProperty("javax.net.ssl.trustStorePassword", "keystore_password"); 
+0

感謝您的幫助。但是現在我不使用客戶端,我嘗試配置tomcat + axis + ssl,目前我沒有創建web服務應用程序。 – Jazys

1

首先,這個問題是幾乎可以肯定的是,證書,您使用保護Tomcat不會被標準CA簽名。這可能會花費,但實際上並沒有多少,這使客戶的工作變得更好。如果您在客戶端證書模式下使用SSL(不是默認值,但易於打開),那麼您還必須配置Tomcat以瞭解客戶端證書的簽名者(或簽名者) - 除非他們使用標準CA的。

如果我這樣解釋,也許會更容易。當SSL(或HTTPS)連接的一端使用加密證書證明他們是誰時 - 服務器總是這樣做,並且可以請求客戶端也這樣做 - 另一端收到一整套關於它是誰的簽名斷言,但仍需要獨立檢查這些斷言是否屬實。這是通過檢查誰簽署了斷言(以及其他一些事情)來完成的;如果它是由可信任的人簽署的,即,一個證書頒發機構,那麼加密身份的接收者可以知道他們真正在與誰交談。

這雖然是一個過於簡單化:證書到期,也有使用限制,可以有信任鏈,併爲HTTPS有額外的檢查了。但最終還是要歸結到「我在和誰交談,我真的相信他們?」密碼學有很多幫助,但這確實意味着需要信任根。默認情況下,它是需要信任根(或根)的客戶端,但使用客戶端認證的SSL則是雙方。

+0

另外,是否真的有必要使用Axis?有更好的Java服務引擎的實現... –

1

版本服務的錯誤是很常見的,我遇到了我的新鮮完全相同的問題安裝的Axis2的& tomcat的了。

Anways,修復版服務錯誤,打開的Axis2的Web/HappyAxis.jsp,找到下面的代碼行:

OMNamespace omNs = fac.createOMNamespace("http://axisversion.sample/xsd", "ns1"); 

修改上面的線以下:

OMNamespace omNs = fac.createOMNamespace("http://axisversion.sample", "ns1"); 
0

請參閱鏈接:http://axis.apache.org/axis2/java/core/docs/servlet-transport.html

對於每個協議(HTTP和/或HTTPS),必須在axis2.xml中聲明AxisServletListener實例。如果僅使用單個協議,則不需要進一步的配置。例如,如果僅使用HTTP,下面的聲明必須存在於axis2.xml:

<transportReceiver name="http" class="org.apache.axis2.transport.http.AxisServletListener"/> 

如果HTTP和HTTPS被使用,然後事情就變得更加複雜。原因是,爲了向WSDL發佈正確的端點URI,AxisServlet必須知道HTTP和HTTPS使用的端口。不幸的是,servlet API不允許Web應用程序發現所有已配置的協議。它僅提供有關當前請求的協議,主機名和端口的信息。如果只配置了一個AxisServletListener,那麼這個信息足以讓AxisServlet自動檢測端口號。如果使用HTTP和HTTPS(或者通過AxisServlet之外的傳輸檢索WSDL),則AxisServlet無法知道端口號,直到它爲每個協議處理了至少一個請求。爲了在這種情況下預測WSDL的生成,有必要在axis2.xml中顯式配置端口號,如下例所示:

<transportReceiver name="http" class="org.apache.axis2.transport.http.AxisServletListener"> 
    <parameter name="port">80</parameter> 
</transportReceiver> 

<transportReceiver name="https" class="org.apache.axis2.transport.http.AxisServletListener"> 
    <parameter name="port">443</parameter> 
</transportReceiver>