2012-09-18 104 views
1

我是web服務新手,我需要編寫簡單的spring-ws客戶端,它將通過SSL與服務器通信。這種情況是:帶證書的Spring-WS客戶端

  • 我的客戶以http效果很好我的本地WS在我的GlassFish服務器上(問題是遠程服務器和HTTPS)
  • 遠程服務器正常工作。我將與數據只是工作,它向我發送
  • 我有服務器的HTTPS解決
  • 我有一個從服務器提供商

我認爲這將是很容易找到這樣的任務,但我一個簡單的教程客戶端證書有問題找到這樣的事情。這真的很不尋常或者是我的問題嗎?你知道一些很好的教程/書來創建它嗎?這可能是一些簡單的快速步驟,我只需要連接到該服務器並從中獲取數據。

我使用:

編輯:的話題

更多細節我改變從教程中,我提到我的web服務我在本地主機(無SSL)創建工作的客戶端。它運行良好,請求和響應是正確的。然後我改變它與遠程服務器一起工作。我生成了新的類並在ApplicationContext中設置了服務器的新地址。第一個錯誤是缺少commons-logging庫。我添加了它。然後,新的錯誤appeard(短該錯誤的版本):

org.springframework.ws.client.WebServiceIOException: I/O error: java.security.cert.CertificateException: No name matching certificatename found; nested exception is javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching certificatename found 

我使用密鑰工具加到我的證書到cacerts中在我的JDK。它沒有幫助。我發現一些有關這個錯誤,並試圖從去年後在這裏添加代碼:

http://www.coderanch.com/t/557677/sockets/java/CertificateException-No-name-matching-hostname

它不應該是很安全的,但我想它。新的錯誤是:

Exception in thread "main" org.springframework.ws.client.WebServiceTransportException: Internal Server Error [500] 
at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:663) 
at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:587) 
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:537) 
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:384) 
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:378) 
... 
+0

您需要提供有關您觀察到的例外/錯誤的更多詳細信息。 – helios

+0

您是使用自簽名證書還是從證書頒發機構獲取? – MarkOfHall

+0

證書是自簽名的。實際上,我們現在正在密切關注提供商提供的證書,證書已從服務器IP中存儲了不同的IP。其實我們有2臺遠程服務器(測試服務器和官方),他們給我們可能錯誤的測試證書。我會嘗試連接到正確的併發布結果 – Miroslav

回答

1

我解決了這個問題。我終於可以訪問我們的WS服務器,所以我可以檢查日誌。它表明證書完全沒有問題。消息正確到達服務器。這個問題開始當服務器試圖解析我的消息,這失敗,服務器將返回錯誤500錯誤日誌中:

Unable to create envelope from given source

我和我的同事發現服務器Java 6的運行,但我們的應用程序在Java 7上,我們試圖在Java 7私有服務器上移動我們的應用程序,並且一切運行良好。經過一番搜索之後,我們發現解析器xalan.jar和xerces.jar可能是問題,更新它們也可能解決這個問題。無論如何,使用相同版本的Java應該是解決方案。

不幸的是,我不能去Java 6和服務器無法升級到Java 7(細節不重要)。所以我用Axis創建了一個全新的客戶端,說實話,我很高興我做出了這個決定。它從一開始就工作過,使用起來更容易。如果有人有興趣,這裏是我folowed教程(有是如何在我需要的最終使用生成的代碼也)

http://px.pats.no/px/Eclipse_tutorial.html

+0

我從服務器得到了同樣的錯誤,因爲「無法從給定源創建信封」,但錯誤代碼是400,兩者都使用相同的Java版本1.8。那麼可能是什麼問題? – Kramer

0

這個問題是有關您已經不包含在DNS名稱您的證書來解決這個問題,試圖重塑您的證書:

keytool ... san=ip:10.1.1.1 

或簡單地嘗試添加一個靜態方法,它會告訴java的不驗證域:

static{ 
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new javax.net.ssl.HostnameVerifier(){ 

    public boolean verify(String dns, 
      javax.net.ssl.SSLSession sslSession) { 
     return true; 
    } 
}); 

}