Spring Boot 2.1.1: UnsatisfiedLinkError: org.apache.tomcat.jni.SSL.renegotiatePending - PullRequest
0 голосов
/ 03 декабря 2018

После обновления с 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

Явная блокировка зависимости от 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

Проблема устранена с помощью вышеуказанной блокировки зависимостей.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Я не могу добавлять комментарии, поэтому вот скромное дополнение к приведенному выше ответу для немного другой установки (веб-приложение, разработанное с использованием Spring Framework на tomcat 8.5).

При сборке из tcnative из исходного кода и использовании tomcatиз репозиториев не забудьте скопировать библиотеку tcnative в папку / usr / lib64 и воссоздать символические ссылки в этой папке.

Для меня проблема началась в начале апреля 2019 года, когда tomcat был обновлён с версии 8.5.32 до 8.5.35, но tomcat native все еще был в версии 1.2.17, и в репозиториях обновления не было.Ответ от Энди Уилкинсона был единственным, который я смог найти, который правильно объясняет проблему и помогает.

0 голосов
/ 03 декабря 2018

Spring Boot 2.1.1 обновлен до Tomcat 9.0.13 с 9.0.12.Из-за этого изменения для Tomcat 9.0.13 требуется версия Tomcat Native, которая содержит это изменение .Это доступно в 1.2.18 и позже.Требуется использовать новый выпуск исправлений Tomcat Native при обновлении до нового выпуска исправлений Tomcat.Точно так же следует ожидать, что новый выпуск патча Spring Boot будет обновлен до нового выпуска патча одной из его зависимостей.

Если ваша ОС не предоставляет обновленный пакет Tomcat Nativeчто вы можете использовать, я бы порекомендовал построить его самостоятельно.Инструкции для этого можно найти в документации Tomcat .Это предпочтительнее, чем понизить Tomcat до 9.0.12, так как застревание в более старой версии увеличивает ваш риск быть подверженным ошибке или уязвимости в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...