【问题标题】:javax.net.ssl.SSLKeyException: FATAL Alert:BAD_CERTIFICATE - A corrupt or unuseable certificate was receivedjavax.net.ssl.SSLKeyException:致命警报:BAD_CERTIFICATE - 收到损坏或无法使用的证书
【发布时间】:2015-04-01 12:30:44
【问题描述】:

我在尝试访问 WSDL 端点时遇到以下错误。

首先我使用 cliengen ant 任务创建了客户端 jar,然后创建了一个简单的 java 类来测试 wsdl 端点,但我遇到了错误-

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:66)
    at java.io.BufferedOutputStream.write(BufferedOutputStream.java:105)
    at java.io.FilterOutputStream.write(FilterOutputStream.java:80)
    at weblogic.webservice.binding.soap.HttpClientBinding.writeToStream(HttpClientBinding.java:430)
    at weblogic.webservice.binding.soap.HttpClientBinding.send(HttpClientBinding.java:219)
    at weblogic.webservice.core.handler.ClientHandler.handleRequest(ClientHandler.java:37)
    at weblogic.webservice.core.HandlerChainImpl.handleRequest(HandlerChainImpl.java:143)
    at weblogic.webservice.core.ClientDispatcher.send(ClientDispatcher.java:231)
    at weblogic.webservice.core.ClientDispatcher.dispatch(ClientDispatcher.java:143)
    at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:471)
    at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:457)
    at weblogic.webservice.core.rpc.StubImpl._invoke(StubImpl.java:303)

谁能帮忙?

【问题讨论】:

  • 这是两种方式的 SSL 还是一种方式?
  • 尝试将:-Djavax.net.debug=ssl 添加到您的 java args 中,看看是否会产生更相关的日志。
  • 否..它没有生成更多日志..我正在尝试访问 http wsdl 端点。我不明白为什么它会抛出 SSLKeyException。
  • 我需要服务器证书吗?如果是,那么我怎样才能得到这个?
  • 尝试开启环境 > 服务器 > [我的服务器] > SSL > 高级 > 按照stackoverflow.com/questions/27928157/…使用 JSSE SSL

标签: java web-services jakarta-ee wsdl2java


【解决方案1】:

我能够通过使用以下命令更新 \Oracle\Middleware\user_projects\domains\my_domain\bin\setDomainEnv.cmd 来解决异常

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

【讨论】:

    【解决方案2】:

    通过在 JVM 参数中添加以下行来解决此问题。

    -Dweblogic.security.SSL.nojce=true 
    -Dweblogic.ssl.JSSEEnabled=true 
    -Dweblogic.security.SSL.enableJSSE=true
    

    别忘了回收JVM。 :)

    【讨论】:

      【解决方案3】:

      在启动参数中添加这个

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

      【讨论】:

        猜你喜欢
        • 2014-01-21
        • 2023-04-07
        • 2015-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-08
        相关资源
        最近更新 更多