java - 从jsp获取 "A corrupt or unuseable certificate was received"异常

标签 java http jsp ssl weblogic

我正在从 unix 批处理文件调用一个 Web 服务并成功发出请求并得到响应。

但是当我从 jsp 页面调用相同的 Web 服务时,我收到 BAD_CERTIFICATE 错误。

FATAL Alert:BAD_CERTIFICATE - A corrupt or unuseable certificate was received.
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:65)
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
    at java.io.FilterOutputStream.flush(FilterOutputStream.java:123)
    at weblogic.net.http.HttpURLConnection.writeRequests(HttpURLConnection.java:150)
    at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:364)
    at weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37)
    at jsp_servlet._test._util.__testservice._jspService(__testservice.java:590)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
    at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:394)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:309)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3392)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2140)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2046)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)

需要这方面的帮助。 谢谢。

最佳答案

通常的解决方案是启用 JSSE,但您使用的是非常旧的 WLS 版本。无论如何,根据 Oracle KM:

根据您的情况设置以下 JAVA_OPTIONS 并重新启动服务器。

发布 WLS 10.3.3

-Dweblogic.ssl.JSSEEnabled=true
-Dweblogic.wsee.client.ssl.usejdk=true
-Dweblogic.wsee.skip.async.response=true
-Dweblogic.wsee.client.ssl.stricthostchecking=false
-Dweblogic.webservice.client.ssl.adapterclass=weblogic.webservice.client.JSSEAdapter

WLS 10.3.2 之前

-Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol
-Dssl.SocketFactory.provider=com.sun.net.ssl.internal.SSLSocketFactoryImpl
-DUseSunHttpHandler=true
-Dweblogic.wsee.client.ssl.usejdk=true
-Dweblogic.wsee.skip.async.response=true
-Dweblogic.wsee.client.ssl.stricthostchecking=false
-Dweblogic.webservice.client.ssl.adapterclass=weblogic.webservice.client.JSSEAdapter

引用:致命警报:BAD_CERTIFICATE - 当与外部 WebService 握手时使用 Certicom 不支持的证书(文档 ID 1671346.1)

关于java - 从jsp获取 "A corrupt or unuseable certificate was received"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58796840/

相关文章:

java - Spring Boot i18n 问题

java - HttpSessionDestroyedEvent 何时发送以及原因

java - SuggestionListener 中的 onSuggestionClick(intposition) 给出 ArrayList 的绝对位置

java - GWT上传文件

Java 8 List<V> 到 Map<K, V> 覆盖重复键

http - HTTP 响应可以省略 Reason-Phrase 吗?

git - 如何在 http 模式下使用 gitolite

java - Android 中仅客户端套接字编程

java - 尝试获取一个查询以将 LIKE 函数与 JSP 中的变量一起使用

mysql - 我想在我的 Springboot 项目中实现 session (HTTP 请求)概念,但它给出了这个错误