Hello,

I have setup a CXF endpoint on Tomcat. I have enabled SSL on tomcat.
I am able to access the deployed webservice using
http://localhost:8080/webapp/services/one.
When I use the SSL port(https://localhost:8443/webapp/services/one) and try
accessing the same webservice thru my java program, I get following:

Caused by: javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.j: PKIX
path building failed: java.security.cert.CertPathBuilderException: unable
to find valid certification path to requested target
    at com.ibm.jsse2.j.a(j.java:36)
    at com.ibm.jsse2.qc.a(qc.java:199)
    at com.ibm.jsse2.ab.a(ab.java:171)
    at com.ibm.jsse2.ab.a(ab.java:180)
    at com.ibm.jsse2.bb.a(bb.java:346)
    at com.ibm.jsse2.bb.a(bb.java:559)
    at com.ibm.jsse2.ab.r(ab.java:554)
    at com.ibm.jsse2.ab.a(ab.java:325)
    at com.ibm.jsse2.qc.a(qc.java:617)
    at com.ibm.jsse2.qc.h(qc.java:103)
    at com.ibm.jsse2.qc.a(qc.java:166)
    at com.ibm.jsse2.qc.startHandshake(qc.java:649)
    at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:62)
    at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:22)
    at
sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1103)
    at com.ibm.net.ssl.www2.protocol.https.b.getOutputStream(b.java:16)
    at
org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.setupWrappedStream(URLConnectionHTTPConduit.java:174)
    at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1290)
    at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1246)
    at
org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.onFirstWrite(URLConnectionHTTPConduit.java:201)


Then I added http-conduit as per this link
<http://cxf.apache.org/docs/client-http-transport-including-ssl-support.html>,
to spring beans definition as follows:

    <http:conduit name="{http://com.mycompany/services}ONEPort.http-conduit
">
        <http:tlsClientParameters>
            <sec:keyManagers keyPassword="keyPassword">
                <sec:keyStore file="src/test/resources/keystore.jks"
                    password="keyStorepassword" type="JKS" />
            </sec:keyManagers>
            <sec:trustManagers>
                <sec:keyStore file="src/test/resources/keystore.jks"
                    password="keyStorepassword" type="JKS" />
            </sec:trustManagers>
            <sec:cipherSuitesFilter>
                <!-- these filters ensure that a ciphersuite with
export-suitable or
                    null encryption is used, but exclude anonymous
Diffie-Hellman key change
                    as this is vulnerable to man-in-the-middle attacks -->
                <sec:include>.*_EXPORT_.*</sec:include>
                <sec:include>.*_EXPORT1024_.*</sec:include>
                <sec:include>.*_WITH_DES_.*</sec:include>
                <sec:include>.*_WITH_AES_.*</sec:include>
                <sec:include>.*_WITH_NULL_.*</sec:include>
                <sec:exclude>.*_DH_anon_.*</sec:exclude>
            </sec:cipherSuitesFilter>
        </http:tlsClientParameters>
    </http:conduit>

Now I get:

Caused by: java.security.UnrecoverableKeyException: Cannot recover key
    at com.ibm.crypto.provider.s.recover(s.java:90)
    at
com.ibm.crypto.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:256)
    at java.security.KeyStore.getKey(KeyStore.java:803)
    at com.ibm.jsse2.uc.<init>(uc.java:113)
    at com.ibm.jsse2.cc$a_.engineInit(cc$a_.java:15)
    at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:16)
    at
org.apache.cxf.configuration.jsse.TLSParameterJaxBUtils.getKeyManagers(TLSParameterJaxBUtils.java:279)
    at
org.apache.cxf.configuration.jsse.TLSClientParametersConfig.createTLSClientParametersFromType(TLSClientParametersConfig.java:110)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
    at java.lang.reflect.Method.invoke(Method.java:618)
    at
org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:160)

Could anyone please point me what am I doing wrong here?

Is there anything I need to do in web service endpoint spring configuration
(apart from setting Tomcat for SSL) to ensure I can access web service
using https?
I know I need to add http-conduit element on client side. But I seem to be
doing something wrong.

Thanks,
Giriraj.

Reply via email to