Report better accept handshake errors instead of "General SSLEngine problem" #37
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Myself and some users of my program have been getting errors sometimes when trying to accept connections.
Within ruby, the error appears as OpenSSL::SSL::SSLError, "General SSLEngine problem".
After some lengthy diagnosis it turns out the problem is the client was sending a client certificate. On the server side, the default verify_mode is VERIFY_PEER. Thus, with no way to verify it, it cannot handshake. But rather than saying "certificate verify failed" in the accept exception, it says "General SSLEngine problem".
Looking in the java SSL and jruby-openssl code it seems the SSL stack throws in different ways and sometimes "loses" the diagnostic message (certificate verify failed). In jruby-openssl when calling connect this appears to be handled... it traces back through the exception causes to the first non-SSLHandshakeException exception, and raises a ruby exception based on that.
This patch modifies accept so it does the same as connect. This fixes my issue and in my tests my program now correctly reports "certificate verify failed".
Thanks!