收到致命警报:与 Tomcat 的握手失败

Posted

技术标签:

【中文标题】收到致命警报:与 Tomcat 的握手失败【英文标题】:Received fatal alert: handshake_failure with Tomcat 【发布时间】:2011-12-12 06:59:54 【问题描述】:

我在 Tomcat 中的授权 ssl 连接有问题。我开发了使用证书连接到外部服务器的类。当我在命令行中运行它时它工作正常。但是当我从 Tomcat 中托管的 JSP 页面调用它时,会抛出如下异常:

错误:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) com.sun.net.ssl.internal。 ssl.Alerts.getSSLException(Alerts.java:136) com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1694) com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord( SSLSocketImpl.java:939) com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1120) com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1147) com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1131) sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434) sun.net.www.protocol。 https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166) sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049) sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionIm pl.java:234) myPakage.myClass.method(myClass.java:90) org.apache.jsp.jsp.test.tst_jsp._jspService(tst_jsp.java:66) org.apache.jasper.runtime.HttpJspBase.service( HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386) org.apache.jasper.servlet.JspServlet。 serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.catalina.core。 ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) org.apache。 catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:554) org.apache.catalina.core.StandardHostValve.invo ke(StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina。 connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Thread.java:619) 块引用

我已经将外部服务器的公共证书导入到 java home 中的 cacerts。 Java 版本:6.0_21 Tomcat 版本:6.0.32

我真的厌倦了这个问题。请帮忙解决这个问题。

【问题讨论】:

您是否设置了密钥库?你读对了吗? 你在Tomcat中设置证书和https连接了吗? 是吗?我给类密钥库和 kaystore 密码的绝对路径。之后 myClass 使用该参数连接到服务器 它正确读取密钥库参数,当我在命令行中运行我的类时,我给出与 JSP 调用相同的参数。 【参考方案1】:

如果您现在仍然有同样的问题,请升级到 java 1.6.0_32。遇到同样的问题,升级后解决了。

【讨论】:

以上是关于收到致命警报:与 Tomcat 的握手失败的主要内容,如果未能解决你的问题,请参考以下文章

收到致命警报:java 1.7.0_80 中的握手失败异常

SSLHandshakeException:收到致命警报:Java 6 -> 8 升级后的握手失败

无法下载站点地图:SSLHandshakeException:收到致命警报:handshake_failure

收到致命警报:protocol_version 构建失败 Gradle/Maven

TLS 致命:握手失败

curl:(35)错误:14077410:SSL例程:SSL23_GET_SERVER_HELLO:sslv3警报握手失败