axis2 over https启动问题

时间:2011-01-16 21:20:41

标签: java web-services tomcat https axis2

我试图找出如何在https上使用axis2 axis2指南说:

  

CommonsHTTPTransportSender也可以   用于通过https进行通信。

也:

  

请注意,默认情况下为HTTPS   仅在服务器不工作时才有效   期望验证客户端   (仅限单向SSL)和服务器所在的位置   拥有客户的公钥   信托商店。如果你想表演   SSL客户端身份验证(双向SSL),   你可以使用   Protocol.registerProtocol的功能   HttpClient的。

所以我的问题是,针对轴有两种HTTPS方法吗? 1)使用CommonsHTTPTransportSender
2)在apache配置上取消注释https连接器??
或者只有(1)是标准方法? 还有客户端身份验证的问题是什么?我知道对于apache连接器我只需要设置clientAuth。这不适用于轴?

欢迎任何输入!
感谢

2 个答案:

答案 0 :(得分:0)

以下是我在我的axis.xml配置中使用的https连接器方法(Axis 1.4.1)。

<transportReceiver name="https" class="org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener">
    <parameter name="port" locked="false">9002</parameter>
    <parameter name="non-blocking" locked="false">true</parameter>
  <parameter name="keystore" locked="false">
      <KeyStore>
          <Location>.keystore</Location>
          <Type>JKS</Type>
          <Password>changeme</Password>
          <KeyPassword>changeme2</KeyPassword>
      </KeyStore>
  </parameter>
</transportReceiver>

我将我的密钥库转储到axis2-1.4.1 / lib下,以避免添加专用的类路径。

答案 1 :(得分: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,那么事情会变得有点复杂。原因是为了公开具有正确端点URI的WSDL,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">8080</parameter>
</transportReceiver>

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