从Spring Boot 2.1.0.RELEASE更新到2.1.1.RELEASE之后,所有HTTPS请求均失败,并显示以下错误:
2018-12-03 14:23:46,089 PID=21726 LEVEL=ERROR THREAD=https-openssl-nio-443-exec-2 LOGGER=org.apache.tomcat.util.net.NioEndpoint METHOD=log:175 MESSAGE="java.lang.UnsatisfiedLinkError: org.apache.tomcat.jni.SSL.renegotiatePending(J)I at org.apache.tomcat.jni.SSL.renegotiatePending(Native Method) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13] at org.apache.tomcat.util.net.openssl.OpenSSLEngine.getHandshakeStatus(OpenSSLEngine.java:1021) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13] at org.apache.tomcat.util.net.openssl.OpenSSLEngine.wrap(OpenSSLEngine.java:457) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13] at java.base/javax.net.ssl.SSLEngine.wrap(SSLEngine.java:471) ~[na:na] at org.apache.tomcat.util.net.SecureNioChannel.handshakeWrap(SecureNioChannel.java:440) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13] at org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel.java:211) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1394) ~[tomcat-embed-core-9.0.13.jar!/:9.0.13] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.13.jar!/:9.0.13] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) [na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [na:na] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.13.jar!/:9.0.13] at java.base/java.lang.Thread.run(Thread.java:844) [na:na] "
恢复到2.1.0.RELEASE解决了该问题。
怀疑与此有关:https : //github.com/spring-projects/spring- boot/issues/15261
明确锁定对tomcat-embed-core 9.0.12的依赖关系可以解决此问题。
<dependencyManagement> <dependencies> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>9.0.12</version> </dependency> </dependencies> </dependencyManagement>
怀疑libtcnative更新也可以解决该问题,但是Ubuntu LTS的当前版本是1.2.16-1build1,因此我们认为这是Spring Boot中的回归。
https://packages.ubuntu.com/search?keywords=libtcnative-1
上面列出的依赖项锁定已解决问题。
Spring Boot 2.1.1从9.0.12升级到Tomcat 9.0.13。由于此更改,Tomcat 9.0.13需要包含此更改的Tomcat Native版本。它在1.2.18及更高版本中可用。预计将需要在升级到新的Tomcat修补程序版本时使用新的Tomcat Native修补程序版本。同样,还可以预期Spring Boot的新修补程序版本将更新为其依赖项之一的新修补程序版本。
如果您的操作系统没有提供您可以使用的最新Tomcat Native软件包,我建议您自己构建。这样做的说明可以在Tomcat的文档中找到。这比将Tomcat降级到9.0.12更为可取,因为卡在较旧的版本上会增加您将来受到错误或安全漏洞影响的风险。