跳轉到內容

WebObjects/Web 服務/Web 服務消費者

來自華夏公益教科書,開放書籍,開放世界

SSL WebServices 問題

[編輯 | 編輯原始碼]

1. WOWebServiceClient 類無法訪問安全的 HTTP Web 服務提供者(WO 5.2.2)

問題:com.webobjects.webservices.client.WOWebServiceClient 類在嘗試從安全的 HTTP Web 服務提供者讀取 WSDL 時,只丟擲類似這樣的異常

 java.lang.IllegalArgumentException: Unable to open url: 
   https:///cgi-bin/WebObjects/Test-Server.woa/ws/Test?wsdl
   at com.webobjects.webservices.client.WOWebServiceClient.
       initializeFromURL(WOWebServiceClient.java:72)
   at com.webobjects.webservices.client.WOWebServiceClient.
       <init>(WOWebServiceClient.java:59)

這個問題似乎與自簽名證書無關,因為我也用可信證書進行了測試。

Patrick Robinson

[編輯 | 編輯原始碼]

這很奇怪。。。

當我嘗試在我的開發機器(它只有自簽名證書)上同時執行服務和客戶端,並指定 HTTPS WSDL 地址時,遇到了同樣的問題。但是在我將我的證書新增到 /Library/Java/Home/lib/security/cacerts 後

 cd /Library/Java/Home/lib/security
 sudo keytool -import -keystore cacerts -alias myalias -file mycert.pem
  (The default password for the cacerts keystore is "changeit")

一切正常。

當我透過 HTTPS 在具有有效可信證書的系統上執行服務時,我也沒有遇到訪問 WSDL 或服務的任何問題。

Francis Labrie

[編輯 | 編輯原始碼]

這最終不是一個真正的錯誤,感謝 PatrickRobinson 和 JAD 工具。這個異常通常在伺服器證書不可信時丟擲,即證書是自簽名的,沒有儲存在 Java 可信金鑰庫中,或者伺服器上的主機名與證書中的主機名不一致等等。

問題是 com.webobjects.webservices.client.WOWebServiceClient 類的 initializeFromURL() 方法沒有包裝和轉發捕獲的異常,它只丟擲 IllegalArgumentException,並顯示簡單的“無法開啟 url”或“無法從 url 建立服務”訊息,沒有任何詳細資訊。

為了避免此類問題,只需使用此處描述的程式碼放鬆 Java 安全管理器:如何信任任何 SSL 證書.

到 Apple 文件

[編輯 | 編輯原始碼]

http://developer.apple.com/documentation/WebObjects/Web_Services/Web_Services/chapter_4_section_3.html

華夏公益教科書