Spring Boot 2.1.1:UnsatisfiedLinkError:org.apache.tomcat.jni.SSL.renegotiatePending

2024-04-13

从 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 18.04.1 LTS
  • Java:OpenJDK 运行时环境(构建 10.0.2+13-Ubuntu-1ubuntu0.18.04.4)
  • libtcnative:1.2.16-1build1

怀疑这与:https://github.com/spring-projects/spring-boot/issues/15261 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 https://packages.ubuntu.com/search?keywords=libtcnative-1

上面列出的依赖锁已解决问题。


Spring Boot 2.1.1从9.0.12升级到Tomcat 9.0.13。由于这个变化 https://github.com/apache/tomcat/commit/1d047375b904fdda0541d6636d2695b321ebf4e8, Tomcat 9.0.13 需要包含以下内容的 Tomcat Native 版本这个变化 https://github.com/apache/tomcat-native/commit/02fe7c14ceba27c2180e79837a260afa64ebed30。它在 1.2.18 及更高版本中可用。升级到新的 Tomcat 补丁版本时,需要使用 Tomcat Native 的新补丁版本是预料之中的。同样,Spring Boot 的新补丁版本也将更新为其依赖项之一的新补丁版本。

如果您的操作系统没有提供可供您使用的最新 Tomcat Native 软件包,我建议您自己构建它。可以在以下位置找到相关说明:Tomcat 的文档 http://tomcat.apache.org/native-doc/。这比将 Tomcat 降级到 9.0.12 更可取,因为陷入旧版本会增加您将来受错误或安全漏洞影响的风险。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 2.1.1:UnsatisfiedLinkError:org.apache.tomcat.jni.SSL.renegotiatePending 的相关文章

随机推荐