无法从Weblogic访问HTTPS

我有一个Weblogic访问HTTPS服务器的问题,我可以访问其他HTTPSurl,如谷歌或微软。 尝试连接到url的代码是:

URL url = new URL("https://myserver.com"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("User-Agent", "Mozilla/5.0"); // fails here responseCode = connection.getResponseCode(); 

我得到以下堆栈跟踪:

 java.io.IOException: Connection closed, EOF detected at weblogic.socket.JSSEFilterImpl.handleUnwrapResults(JSSEFilterImpl.java:539) at weblogic.socket.JSSEFilterImpl.unwrapAndHandleResults(JSSEFilterImpl.java:456) at weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:80) at weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:64) at weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:59) at weblogic.socket.JSSEFilterImpl.write(JSSEFilterImpl.java:390) at weblogic.socket.JSSESocket$JSSEOutputStream.write(JSSESocket.java:78) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at java.io.FilterOutputStream.flush(FilterOutputStream.java:140) at weblogic.net.http.HttpURLConnection.writeRequests(HttpURLConnection.java:186) at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:400) at weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37) at weblogic.net.http.HttpURLConnection.getResponseCode(HttpURLConnection.java:1005) 

在Weblogic的控制台中,我将以下设置设置为true:环境>服务器> [我的服务器]> SSL>高级>使用JSSE SSL

如果我禁用该属性,我会得到以下堆栈跟踪:

 javax.net.ssl.SSLKeyException: FATAL Alert:BAD_CERTIFICATE - A corrupt or unuseable certificate was received. at com.certicom.tls.interfaceimpl.TLSConnectionImpl.fireException(Unknown Source) at com.certicom.tls.interfaceimpl.TLSConnectionImpl.fireAlertSent(Unknown Source) at com.certicom.tls.record.handshake.HandshakeHandler.fireAlert(Unknown Source) at com.certicom.tls.record.handshake.HandshakeHandler.handleHandshakeMessages(Unknown Source) at com.certicom.tls.record.MessageInterpreter.interpretContent(Unknown Source) at com.certicom.tls.record.MessageInterpreter.decryptMessage(Unknown Source) at com.certicom.tls.record.ReadHandler.processRecord(Unknown Source) at com.certicom.tls.record.ReadHandler.readRecord(Unknown Source) at com.certicom.tls.record.ReadHandler.readUntilHandshakeComplete(Unknown Source) at com.certicom.tls.interfaceimpl.TLSConnectionImpl.completeHandshake(Unknown Source) at com.certicom.tls.record.WriteHandler.write(Unknown Source) at com.certicom.io.OutputSSLIOStreamWrapper.write(Unknown Source) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at java.io.FilterOutputStream.flush(FilterOutputStream.java:140) at weblogic.net.http.HttpURLConnection.writeRequests(HttpURLConnection.java:186) at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:400) at weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37) at weblogic.net.http.HttpURLConnection.getResponseCode(HttpURLConnection.java:1005) 

我尝试访问的服务器有一个经过validation的证书,浏览器不会抱怨它。

谢谢

最终它通过在Weblogic参数中设置它们来工作:

 -DUseSunHttpHandler=true -Dssl.SocketFactory.provider=sun.security.ssl.SSLSocketFactoryImpl -Dssl.ServerSocketFactory.provider=sun.security.ssl.SSLSocketFactoryImpl 

根据这些post: https : //stackoverflow.com/a/7276163和https://community.oracle.com/thread/2523332

对我来说使用-DUseSunHttpHandler=true可以工作,但我不能有这个参数,因为我在重新部署时重启Managed Server有问题。

这对我有所帮助:

 url = new URL(null,"https://yoururl.com",new sun.net.www.protocol.https.Handler());