On 25/04/2016 17:10, Kreuser, Peter wrote:
> Hi there,
> 
> I have setup Tomcat 8.5 with the all new SSL Config and HTTP/2.
> 
> To test the setup I use testssl.sh (https://testssl.sh ) . The scan is 
> successful, also stating HTTP/2 is working. So far so good.
> 
> However I see the following exception in the Logs:
> 
> 25-Apr-2016 17:36:16.697 SEVERE [https-nio2-8443-exec-6] 
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process Error reading 
> request, ignored
> java.lang.IllegalStateException: Failed to create Processor for negotiated 
> protocol [""]
>                 at 
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:736)
>                 at 
> org.apache.tomcat.util.net.Nio2Endpoint$SocketProcessor.run(Nio2Endpoint.java:1699)
>                 at 
> org.apache.tomcat.util.net.Nio2Endpoint.processSocket0(Nio2Endpoint.java:397)
>                 at 
> org.apache.tomcat.util.net.Nio2Endpoint.processSocket(Nio2Endpoint.java:382)
>                 at 
> org.apache.tomcat.util.net.SecureNio2Channel$HandshakeWriteCompletionHandler.completed(SecureNio2Channel.java:115)
>                 at 
> org.apache.tomcat.util.net.SecureNio2Channel$HandshakeWriteCompletionHandler.completed(SecureNio2Channel.java:108)
>                 at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126)
>                 at sun.nio.ch.Invoker.invokeDirect(Invoker.java:157)
>                 at 
> sun.nio.ch.UnixAsynchronousSocketChannelImpl.implWrite(UnixAsynchronousSocketChannelImpl.java:736)
>                 at 
> sun.nio.ch.AsynchronousSocketChannelImpl.write(AsynchronousSocketChannelImpl.java:382)
>                 at 
> sun.nio.ch.AsynchronousSocketChannelImpl.write(AsynchronousSocketChannelImpl.java:399)
>                 at 
> java.nio.channels.AsynchronousSocketChannel.write(AsynchronousSocketChannel.java:577)
>                 at 
> org.apache.tomcat.util.net.SecureNio2Channel.handshakeInternal(SecureNio2Channel.java:273)
>                 at 
> org.apache.tomcat.util.net.SecureNio2Channel.handshake(SecureNio2Channel.java:204)
>                 at 
> org.apache.tomcat.util.net.Nio2Endpoint$SocketProcessor.run(Nio2Endpoint.java:1676)
>                 at 
> org.apache.tomcat.util.net.Nio2Endpoint.processSocket0(Nio2Endpoint.java:397)
>                 at 
> org.apache.tomcat.util.net.Nio2Endpoint.processSocket(Nio2Endpoint.java:382)
>                 at 
> org.apache.tomcat.util.net.SecureNio2Channel$HandshakeReadCompletionHandler.completed(SecureNio2Channel.java:98)
>                 at 
> org.apache.tomcat.util.net.SecureNio2Channel$HandshakeReadCompletionHandler.completed(SecureNio2Channel.java:91)
>                 at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126)
>                 at sun.nio.ch.Invoker$2.run(Invoker.java:218)
>                 at 
> sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
>                 at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>                 at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>                 at 
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>                 at java.lang.Thread.run(Thread.java:745)
> 
> The sourcecode of AbstractProtocol.java states:
> 
>                 if (processor == null) {
>                     String negotiatedProtocol = 
> wrapper.getNegotiatedProtocol();
>                     if (negotiatedProtocol != null) {
>                         UpgradeProtocol upgradeProtocol =
>                                 
> getProtocol().getNegotiatedProtocol(negotiatedProtocol);
>                         if (upgradeProtocol != null) {
>                             processor = upgradeProtocol.getProcessor(
>                                     wrapper, getProtocol().getAdapter());
>                         } else if (negotiatedProtocol.equals("http/1.1")) {
>                             // Explicitly negotiated the default protocol.
>                             // Obtain a processor below.
>                         } else {
>                             // Failed to create processor. This is a bug.
>                             throw new IllegalStateException(sm.getString(
>                                     
> "abstractConnectionHandler.negotiatedProcessor.fail",
>                                     negotiatedProtocol));
>                         }
>                     }
>                 }
> 
> So why is this a bug? Should I change something or should Mark T. look into 
> it?

I don't have exclusive rights for investigating potential Tomcat bugs
you know (although I do have the advantage that a large proportion of my
$dayjob is doing exactly that).

This is on my radar but I'd love to see someone else (I'm looking at you
Peter) take a look. My suggestion is to find out:
a) what protocols Tomcat is advertising
b) what protocols the client is requesting
c) how Tomcat combines a) and b) to get "".

a) and b) should be easy to log from the existing code.

Mark


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to