У меня проблема с 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.
Любая помощь будет очень признательна. Большое спасибо!