跳转到内容

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://127.0.0.1/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

华夏公益教科书