Tomcat SSL - IllegalStateException:SSL 会话 ID 不可用
Posted
技术标签:
【中文标题】Tomcat SSL - IllegalStateException:SSL 会话 ID 不可用【英文标题】:Tomcat SSL - IllegalStateException: SSL session ID not available 【发布时间】:2016-11-05 19:42:21 【问题描述】:我正在开发项目 - Tomcat 9、JSF 2.2、Spring Security 4.1
当我尝试使用 HTTPS SSL 保护连接时,当我访问页面时出现错误,但 HTTPS 运行良好。只有这个错误让我抓狂。
02-Jul-2016 16:02:04.664 WARNING [https-openssl-nio-443-exec-1] org.apache.coyote.http11.Http11Processor.action Exception getting SSL attributes
java.lang.IllegalStateException: SSL session ID not available
at org.apache.tomcat.util.net.openssl.OpenSSLEngine$OpenSSLSession.getId(OpenSSLEngine.java:1048)
at org.apache.tomcat.util.net.jsse.JSSESupport.getSessionId(JSSESupport.java:156)
at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:806)
at org.apache.coyote.Request.action(Request.java:392)
at org.apache.catalina.connector.Request.getAttribute(Request.java:903)
at org.apache.catalina.connector.Request.getAttributeNames(Request.java:985)
at com.sun.faces.application.WebappLifecycleListener.requestDestroyed(WebappLifecycleListener.java:114)
at com.sun.faces.config.ConfigureListener.requestDestroyed(ConfigureListener.java:383)
at org.apache.catalina.core.StandardContext.fireRequestDestroyEvent(StandardContext.java:5953)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:182)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1419)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:44)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
奇怪的是,我的队友没有收到此错误,而且他的代码、服务器和服务器设置相同。
Tomcat HTTPS 设置:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="150"
scheme="https" secure="true"
clientAuth="false" sslProtocol="TLSv1.2"
keystoreFile="C:\apache-tomcat-9.0.0.M8\conf\keystore"
keystorePass="changeit"
keyAlias="tomcat"
keyPass="????" />
对不起我的英语。
【问题讨论】:
【参考方案1】:我怀疑你的队友没有安装Tomcat Native库。
这是启用 TLS 会话票证的副作用。如果您在 SSLHostConfig
上设置 disableSessionTickets="true"
,您将看到 TLS 会话 ID,并且错误将消失。
您在启用会话票证时看到的异常看起来是 Tomcat 的 JSSE 与 OpenSSL 代码中的一个错误。我为 Tomcat Native 打开了一个错误:
https://bz.apache.org/bugzilla/show_bug.cgi?id=59811
您可以通过该错误跟踪进度。
【讨论】:
disableSessionTickets="true"
具体写在哪里?我试图写信给Connector
块,但它没有帮助我。以上是关于Tomcat SSL - IllegalStateException:SSL 会话 ID 不可用的主要内容,如果未能解决你的问题,请参考以下文章