2011-08-25 188 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>