нулевой указатель в java процессоре SSO NIO - PullRequest
3 голосов
/ 07 мая 2020

попытка запустить gitblit на tomcat 9 с использованием JDK 11 иногда приводит к следующей трассировке стека:

gitblit    | 07-May-2020 04:30:39.247 SEVERE [https-jsse-nio-8443-exec-10] org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun Error running socket processor
gitblit    |    java.lang.NullPointerException
gitblit    |            at java.base/sun.security.ssl.HKDF.extract(HKDF.java:93)
gitblit    |            at java.base/sun.security.ssl.HKDF.extract(HKDF.java:119)
gitblit    |            at java.base/sun.security.ssl.ServerHello.setUpPskKD(ServerHello.java:1167)
gitblit    |            at java.base/sun.security.ssl.ServerHello$T13ServerHelloProducer.produce(ServerHello.java:545)
gitblit    |            at java.base/sun.security.ssl.SSLHandshake.produce(SSLHandshake.java:436)
gitblit    |            at java.base/sun.security.ssl.ClientHello$T13ClientHelloConsumer.goServerHello(ClientHello.java:1234)
gitblit    |            at java.base/sun.security.ssl.ClientHello$T13ClientHelloConsumer.consume(ClientHello.java:1170)
gitblit    |            at java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.onClientHello(ClientHello.java:852)
gitblit    |            at java.base/sun.security.ssl.ClientHello$ClientHelloConsumer.consume(ClientHello.java:813)
gitblit    |            at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
gitblit    |            at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
gitblit    |            at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1061)
gitblit    |            at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1048)
gitblit    |            at java.base/java.security.AccessController.doPrivileged(Native Method)
gitblit    |            at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:995)
gitblit    |            at org.apache.tomcat.util.net.SecureNioChannel.tasks(SecureNioChannel.java:443)
gitblit    |            at org.apache.tomcat.util.net.SecureNioChannel.handshakeUnwrap(SecureNioChannel.java:507)
gitblit    |            at org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel.java:238)
gitblit    |            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1616)
gitblit    |            at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
gitblit    |            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
gitblit    |            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
gitblit    |            at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
gitblit    |            at java.base/java.lang.Thread.run(Thread.java:834)

Когда клиенты пытаются получить файлы из gitblit GUI.

Возможно, интересно, пока я не обновился до версии JDF 11.0.7, я видел эту ошибку: Откройте JDK 11 HTTP / 2 Handshake ServerHello java .util.NoSuchElementException

Где исправлено неправильное использование Дополнительного здесь: https://bugs.openjdk.java.net/browse/JDK-8218889, но, возможно, проблема root не решена?

Или любой другой мысли о том, что вызывает эту ошибку? Я использую самоподписанный сертификат, к вашему сведению. Клиент - Firefox, а выпуск java -

openjdk версии «11.0.7» 2020-04-14 OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.7 + 10) OpenJDK 64-Bit Server VM AdoptOpenJDK (сборка 11.0.7 + 10, смешанный режим)

Запуск в системе alpine linux docker.

Выявление проблемы, из-за которой у gitblit иногда возникают тайм-ауты в 1 минуту, и поиск это в журнале. Не уверен, связано ли это или нет ....

Похоже, он также был найден в tomcat https://bz.apache.org/bugzilla/show_bug.cgi?id=64105, и здесь указано

https://bugs.openjdk.java.net/browse/JDK-8241248

Поскольку я не могу предоставить информацию об отслеживании ошибок openjdk, я могу сказать вам, что клиент, который обычно вызывает это для меня, - Firefox 75 на linux.

1 Ответ

0 голосов
/ 13 июня 2020

Как указано в ссылках на багтрекер, которые вы предоставляете, это ошибка, связанная с возобновлением сеанса.

Хотя этот ответ не решает саму ошибку, есть возможность попросить SSLEngine запретить возобновление для конкретного подключения. Это приводит к снижению производительности для будущих подключений, потому что клиенту требуется повторить квитирование для новых подключений вместо того, чтобы использовать механизм возобновления сеанса. invalidate () в SSLSession. Как указано в do c:

Будущие соединения не смогут возобновить или присоединиться к этому сеансу. Однако любое существующее соединение, использующее этот сеанс, может продолжать использовать сеанс до тех пор, пока соединение не будет закрыто.

Это означает, что оно не влияет на текущее соединение, но предотвратит сеанс возобновление и, таким образом, избежать ошибки JDK.

Мой фрагмент для рукопожатия l oop:

case NOT_HANDSHAKING:
case FINISHED:
{
    if( !sslEngine.getSession().isValid() || sslEngine.getSession().getId().length == 0 )
        throw new SSLHandshakeException("Handshake failed");

    // prevent bug with rejoin session
    sslEngine.getSession().invalidate();

    return;
}
...