Further information:
We are accessing web services on a Microsoft IIS server of another organization, over which we have no control.
To gain further insight into the SSLHandshakeException issue, I have now set these JAVA_OPTS in my soapui-pro.sh startup script:
-Dsun.security.ssl.allowUnsafeRenegotiation=true -Dsoapui.https.protocol=SSLv3 -Djavax.net.debug=ssl:verbose
If I wait 5-10 minutes after a successful request before I submit the next request, that new request will always return an SSLHandshakeException.
In the debug=ssl:verbose output from the new request submitted after the 5-10 minute pause, I see this:
%% Client cached [Session-1, SSL_RSA_WITH_3DES_EDE_CBC_SHA]
%% Try resuming [Session-1, SSL_RSA_WITH_3DES_EDE_CBC_SHA] from port 52113
*** ClientHello, SSLv3
RandomCookie: GMT: 1299077875 bytes = { 215, 55, 186, 252, 54, 238, 119, 56, 213, 157, 124, 23, 17, 244, 187, 53, 6, 160, 22, 22, 217, 88, 183, 178, 125, 179, 250, 10 }
Session ID: {220, 23, 0, 0, 203, 174, 79, 205, 21, 8, 138, 129, 125, 16, 64, 41, 50, 67, 98, 63, 88, 88, 88, 88, 75, 90, 110, 77, 238, 76, 1, 0}
Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA,
...]
Compression Methods: { 0 }
Extension elliptic_curves, curve names: {secp256r1, sect163k1, sect163r2, secp192r1, secp224r1, sect233k1, sect233r1, sect283k1, sect283r1, secp384r1, sect409k1, sect409r1, secp521r1, sect571k1, sect571r1, secp160k1, secp160r1, secp160r2, sect163r1, secp192k1, sect193r1, sect193r2, secp224k1, sect239k1, secp256k1}
Extension ec_point_formats, formats: [uncompressed]
***
LogList Updater for http log, WRITE: SSLv3 Handshake, length = 265
LogList Updater for http log, received EOFException: error
LogList Updater for http log, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
LogList Updater for http log, SEND SSLv3 ALERT: fatal, description = handshake_failure
LogList Updater for http log, WRITE: SSLv3 Alert, length = 2
LogList Updater for http log, called closeSocket()
LogList Updater for http log, called close()
LogList Updater for http log, called closeInternal(true)
LogList Updater for http log, called close()
LogList Updater for http log, called closeInternal(true)
LogList Updater for http log, called close()
LogList Updater for http log, called closeInternal(true)
And the soapUI log contains this report of the SSLHandshakeException:
2011-03-02 10:02:11,126 ERROR [WsdlSubmit] Exception in request: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
2011-03-02 10:02:11,126 ERROR [SoapUI] An error occured [Remote host closed connection during handshake], see error log for details
2011-03-02 10:02:11,127 ERROR [errorlog] javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:817)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:632)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:104)
at java.io.FilterOutputStream.write(FilterOutputStream.java:80)
at org.apache.commons.httpclient.WireLogOutputStream.write(WireLogOutputStream.java:86)
at org.apache.commons.httpclient.methods.ByteArrayRequestEntity.writeRequest(ByteArrayRequestEntity.java:90)
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
at com.eviware.soapui.impl.wsdl.submit.transports.http.support.methods.ExtendedPostMethod.writeRequest(ExtendedPostMethod.java:107)
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 com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:194)
at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:123)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:333)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
... 23 more
2011-03-02 10:02:11,189 INFO [AbstractHttpRequestDesktopPanel] Error getting response for [PortalBookingWebServiceSoap.PurchaseMultiTrip:PurchaseMultiTrip]; javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
NOTE: While the SSLHandshakeException occurs every time I submit a new request after a pause of 5-10 minutes, it has also occurred when the time between one response and the next request is only 57ms (in a Test Case with Request1, Property Transfer from Request1 Response to Request2 Request, Request2).
I have searched both within the eviware soapUI forum and elsewhere for "SSLHandshakeException," "SSL Handshake," "SSL Session Resume," "SSL Session Timeout," etc., and have yet to find a solution or workaround for this issue, which significantly impacts my ability to use soapUI for this project.
I'd be grateful for any suggestions. Thanks!
--FastBill