Spring Boot2.1.1:未满足的链接错误:org.apache.tomcat.jni.SSL.renegotiatePending

shyt4zoc  于 2022-11-29  发布在  Spring
关注(0)|答案(3)|浏览(300)

从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可解决此问题。

  • 操作系统:Ubuntu
  • Java:OpenJDK运行时环境(内部版本号10.0.2+13-Ubuntu-1ubuntu0.18.04.4)
  • 库本机:1.2.16-1build1

怀疑这与以下情况有关: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- 1build 1,因此我们认为这是Spring Boot中的一个回归。
https://packages.ubuntu.com/search?keywords=libtcnative-1
使用上面列出的相关性锁解决了问题。

j2cgzkjk

j2cgzkjk1#

Spring Boot 2.1.1从Tomcat 9.0.12升级到Tomcat 9.0.13。由于this change,Tomcat 9.0.13需要包含this change的Tomcat Native版本。它在1.2.18和更高版本中提供。升级到Tomcat的新补丁版本时,需要使用Tomcat Native的新补丁版本。同样,还可以预期SpringBoot的新补丁版本将更新到其依赖项之一的新补丁版本。
如果你的操作系统没有提供最新的Tomcat Native包,我建议你自己构建它。在Tomcat's documentation中可以找到这样做的说明。这比把Tomcat降级到9.0.12更好,因为在旧版本上卡住会增加你将来被bug或安全漏洞影响的风险。

sq1bmfud

sq1bmfud2#

我不能添加评论,所以这里是对上面的答案的一个小小的补充,用于一个稍微不同的设置(使用运行在tomcat8.5上的springframework开发的webapp)。
当从源代码构建tcnative并使用repos中的tomcat时,请记住将tcnative库复制到/usr/lib 64文件夹,并在该文件夹中重新创建符号链接。
对我来说,这个问题始于2019年4月初,当时tomcat从8.5.32升级到8.5.35,但tomcat native仍然是1.2.17版本,repos中没有更新。Andy Wilkinson的答案是我能找到的唯一一个正确解释这个问题并有所帮助的答案。

bxjv4tth

bxjv4tth3#

这可以通过升级***Tomcat Native***来修复。只需删除现有版本,然后替换为最新版本。将其从Apache下载到您的/tmp文件夹中。然后使用this guide将其安装到您的系统中。

相关问题