web-dev-qa-db-ja.com

WeblogicからHTTPSにアクセスできません

WeblogicがHTTPSサーバーにアクセスする際に問題が発生しました。GoogleやMicrosoftなどの他の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>詳細> JSSESSLを使用

そのプロパティを無効にすると、次のスタックトレースが得られます。

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)

アクセスしようとしているサーバーには検証済みの証明書があり、ブラウザーはそれについて文句を言いません。

ありがとう

6
pablo

最終的には、Weblogicの引数にこれらを設定することで機能しました。

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

これらの投稿によると: https://stackoverflow.com/a/727616 および https://community.Oracle.com/thread/2523332

25
pablo

私にとっては-DUseSunHttpHandler=trueは機能しますが、再デプロイ時に管理対象サーバーを再起動する際に問題が発生するため、このパラメーターを設定できません。

これは私を助けました:

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