Unable to access axis2 over https

33,132

Solution 1

I got the answer to this question. I just added one transport receiver for https in axis2.xml file in the server. (\webapps\axis2\WEB-INF\conf\axis2.xml). I added the transport receiver for https as follows: :

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

Note: By default the port parameter is 8080 for transport receiver. If you are having two transport receivers (e.g. http and https), then make sure to add the port in both. E.g. you can have the 2 transport receiver as:

< 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>

Solution 2

Reference: http://axis.apache.org/axis2/java/core/docs/http-transport.html

For each protocol (HTTP and/or HTTPS), an AxisServletListener instance must be declared in axis2.xml. If only a single protocol is used, no further configuration is required. For example, if only HTTP is used, the following declaration must be present in axis2.xml:

<transportReceiver name="http" class="org.apache.axis2.transport.http.AxisServletListener"/>

If both HTTP and HTTPS are used, then things become a bit more complicated. The reason is that in order to expose WSDLs with correct endpoint URIs, AxisServlet must know the ports used by HTTP and HTTPS. Unfortunately the servlet API doesn't allow a Web application to discover all configured protocols. It only provides information about the protocol, host name and port for the current request. If only a single AxisServletListener is configured, then this information is enough to let AxisServlet auto-detect the port number. If both HTTP and HTTPS are used (or if WSDLs are retrieved through transports other than AxisServlet), then AxisServlet has no way of knowing the port numbers until it has processed at least one request for each protocol. To make WSDL generation predictable in this scenario, it is necessary to explicitly configure the port numbers in axis2.xml, such as in the following example:

<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>

Solution 3

This is because the certificate of the tomcat is not trusted. When you start tomcat - start it like following.

sh catalina.sh start -Djavax.net.ssl.trustStore="path/to/tomcat/keystore" -Djavax.net.ssl.trustStorePassword="password"

Or else, import the public certificate of the tomcat to [JAVA_HOME]\lib\security\cacerts

keytool -import -file mycert.cer -keystore cacerts

Default password : changeit

Thanks...

Share:
33,132
Surya
Author by

Surya

Updated on December 05, 2020

Comments

  • Surya
    Surya over 3 years

    I successfully setup my tomcat to be accessed over https. But when I try to access axis2 services, then it gives me internal server error. When I try to access the services by hitting the url in my browser as https://localhost:8443/axis2/services/listServices, then internal server error comes. When I click on validate (https://localhost:8443/axis2/axis2-web/HappyAxis.jsp) then in the server console the following errors come.

    [INFO] Unable to sendViaPost to url[https://localhost:8443/axis2/services/Version]
    org.apache.axis2.AxisFault: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.ce
    rtpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
            at org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:83)
            at org.apache.axis2.transport.http.AxisRequestEntity.writeRequest(AxisRequestEntity.java:84)
            at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
            at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
            at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
            at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
            at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
            at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
            at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346)
            at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:557)
            at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199)
            at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76)
            at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400)
            at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225)
            at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:438)
            at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)
            at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
            at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
            at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:540)
            at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:521)
            at org.apache.jsp.axis2_002dweb.HappyAxis_jsp.invokeTheService(HappyAxis_jsp.java:325)
            at org.apache.jsp.axis2_002dweb.HappyAxis_jsp._jspService(HappyAxis_jsp.java:480)
            at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
            at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
            at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
            at java.lang.Thread.run(Unknown Source)
    Caused by: com.ctc.wstx.exc.WstxIOException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.sec
    urity.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at com.ctc.wstx.sw.BaseStreamWriter.finishDocument(BaseStreamWriter.java:1692)
            at com.ctc.wstx.sw.BaseStreamWriter.close(BaseStreamWriter.java:288)
            at org.apache.axiom.util.stax.wrapper.XMLStreamWriterWrapper.close(XMLStreamWriterWrapper.java:46)
            at org.apache.axiom.om.impl.MTOMXMLStreamWriter.close(MTOMXMLStreamWriter.java:188)
            at org.apache.axiom.om.impl.llom.OMSerializableImpl.serializeAndConsume(OMSerializableImpl.java:197)
            at org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:79)
            ... 39 more
    Caused by: javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.
    provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkEOF(Unknown Source)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkWrite(Unknown Source)
            at com.sun.net.ssl.internal.ssl.AppOutputStream.write(Unknown Source)
            at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
            at java.io.BufferedOutputStream.flush(Unknown Source)
            at org.apache.commons.httpclient.ChunkedOutputStream.flush(ChunkedOutputStream.java:191)
            at com.ctc.wstx.io.UTF8Writer.flush(UTF8Writer.java:99)
            at com.ctc.wstx.sw.BufferingXmlWriter.flush(BufferingXmlWriter.java:214)
            at com.ctc.wstx.sw.BufferingXmlWriter.close(BufferingXmlWriter.java:194)
            at com.ctc.wstx.sw.BaseStreamWriter.finishDocument(BaseStreamWriter.java:1690)
            ... 44 more
    Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to f
    ind valid certification path to requested target
            at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
            at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
            at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
            at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
            at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
            at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
            at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(Unknown Source)
            at com.sun.net.ssl.internal.ssl.AppOutputStream.write(Unknown Source)
            at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
            at java.io.BufferedOutputStream.flush(Unknown Source)
            at org.apache.commons.httpclient.ChunkedOutputStream.flush(ChunkedOutputStream.java:191)
            at com.ctc.wstx.io.UTF8Writer.flush(UTF8Writer.java:99)
            at com.ctc.wstx.sw.BufferingXmlWriter.flush(BufferingXmlWriter.java:214)
            at com.ctc.wstx.sw.BaseStreamWriter.flush(BaseStreamWriter.java:311)
            at org.apache.axiom.util.stax.wrapper.XMLStreamWriterWrapper.flush(XMLStreamWriterWrapper.java:50)
            at org.apache.axiom.om.impl.MTOMXMLStreamWriter.flush(MTOMXMLStreamWriter.java:198)
            at org.apache.axiom.om.impl.llom.OMSerializableImpl.serializeAndConsume(OMSerializableImpl.java:195)
            ... 40 more
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to reque
    sted target
            at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
            at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
            at sun.security.validator.Validator.validate(Unknown Source)
            at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(Unknown Source)
            at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
            at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
            ... 57 more
    Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
            at java.security.cert.CertPathBuilder.build(Unknown Source)
            ... 63 more
    null
    
  • Surya
    Surya over 12 years
    Hey, I got the answer to this. I just added one transport receiver in axis2.xml file in the server. (\webapps\axis2\WEB-INF\conf\axis2.xml).