On 13/06/17 10:13, Kreuser, Peter wrote:
> Mark,
> 
>> On 09/06/17 16:02, Kreuser, Peter wrote:
>>> Hi all,
>>>
>>> Sorry for the long text. I hope somebody can help me track down the problem 
>>> I'm facing with Tomcat (8.5.15), tcnative (1.2.12), openssl (1.1.0e) and 
>>> HTTP/2. JVM is zulu-8.21.0.1 (1.8.0_131-b11)
>>
>> No need to apologise. There was enough information in this report for me
>> to be 95% sure of what was going on before I tested things locally.
>>
>> <snip/>
>>
>>> Would be nice if somebody here could tell me if that is a bug or if I have 
>>> some misconfiguration.
>>
>> It is a bug.
>>
>> The short explanation is that with NIO2, the style of the API (async
>> read/write with CompletionHandlers) means that a TLS connection can get
>> closed down (by a CompletionHandler) before the access log entry is
>> written. This leads to passing a NULL reference to some native code
>> which - unsurprisingly - falls over (Tomcat is meant to make sure it
>> doesn't pass NULL references).
>>
>> There is an easy fix but the side-effect is that sometimes the cipher
>> suite name won't appear in the access log. Depending on timing on your
>> system that could be very frequent to almost never. I'd roughly expect
>> it to happen as frequently as the crashes.
>>
>> The harder fix is to note that we want the info and to ensure we cache
>> it before the TLS connection is closed down. In theory, we could do this
>> in the access log but it means parsing the request attribute config.
>> Performance wise, there will be an impact on users since the lookup to
>> populate the cache will occur during request processing rather than
>> afterwards. However, overall throughput should be unaffected.
>>
>> An alternative fix is for the application to trigger the caching of the
>> TLS info by requesting one of the TLD attributes.
>>
>> Switching to NIO should also fix this. Note, I would not expect NIO and
>> NIO2 to be much different performance wise.
>>
>> Would the easy fix be sufficient?
>>
>> Mark
> 
> For a start the easy fix would be sufficient. Apparently this is only a real 
> problem when I call the site via curl, as it does not happen in the various 
> browsers (at least not on every call).
> 
> We should at least make users aware that certain information can be missing 
> in the accesslog and the cause of it (in the AccessLogValve documentation?). 
> And are there any other implications of the asynchronicity? I guess the 
> behavior of NIO2 and HTTP/2 processing is not obvious?
> 
> Your alternative fix would be to copy the attributes during request 
> processing (in a filter) and then log them from the filter request attributes 
> instead of the predefined ssl attributes? Correct?
> 
> Thank you for your support and the bug fix ;-)! Have you filed the bug 
> internally or should I?

I need to look into this some more first. Remy's comments suggest that
my first analysis might have been wrong.

Mark

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

Reply via email to