Соединитель Tomcat SSL - Http11NioProtocol - javax.crypto.ShortBufferException при втором запросе - PullRequest
0 голосов
/ 13 апреля 2020


У меня проблема с Tomcat 8.5.51, на котором размещено мое приложение Spring Boot 2 (с двухсторонним SSL); Короче говоря, это приложение с серверным и клиентским интерфейсами SOAP (сначала оно называется сервером, затем оно действует как клиент).
Проблема:
при первом запросе (отправленном SoapUI или другим внешним клиентом) все работает хорошо, без исключения; на втором я получил это исключение:

13-Apr-2020 11:45:09.757 INFO [https-jsse-nio-234-exec-1] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
 Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
        java.lang.ArrayIndexOutOfBoundsException: javax.crypto.ShortBufferException: Need at least 336 bytes of space in output buffer
                at sun.security.ssl.CipherBox.decrypt(CipherBox.java:591)
                at sun.security.ssl.EngineInputRecord.decrypt(EngineInputRecord.java:200)
                at sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:963)
                at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:896)
                at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:766)
                at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
                at org.apache.tomcat.util.net.SecureNioChannel.read(SecureNioChannel.java:607)
                at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1289)
                at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1225)
                at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:737)
                at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:368)
                at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:502)
                at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
                at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
                at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
                at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
                at java.lang.Thread.run(Thread.java:748)

Следует отметить, что во втором запросе я не получаю ни одной строки журнала из моего приложения, похоже, что запрос даже не достигает моего код. Вот конфигурация Соединителя:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
port="234" maxThreads="200" scheme="https" secure="true"
SSLEnabled="true" clientAuth="true" sslProtocol="TLS"
keyAlias="agweb2ca"
keystoreFile="conf\cert\keystore_s.jks" keystorePass="*****"
truststoreFile="conf\cert\truststore_s.jks" truststorePass="******"
/>

Я также попробовал все параметры буфера для соединителя (https://tomcat.apache.org/tomcat-8.5-doc/config/ajp.html#NIO_specific_configuration -> установка их в -1 / illimited), но кажется не работать.

Еще одна вещь, которую нужно сказать, это то, что между действующим в качестве SOAP сервером и действующим SOAP клиентом существуют некоторые http (не https) вызовы в другую систему.

также Как я могу включить журнал разбора HTTP-запроса?:

org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
 Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

Любая помощь будет очень признательна. Большое спасибо!

...