Hi,
i am using Tomcat based on APR/OpenSSL and have observed that shutdown behavior 
in bad case is not clean. For example if OpenSSL verify callback verify the 
peer certificate(s) and verification is failed e.g. unknown_certificate, 
revoked etc. OpenSSL sets a handshake error with an alert message 
"unknown_certificate etc.". But this alert is not sent to the peer. I traced 
with wireshark. The following method in OpenSSLEngine.unwrap is invoked and 
throws the SSLException. 

private int pendingReadableBytesInSSL()            throws SSLException {        
// NOTE: Calling a fake read is necessary before calling 
pendingReadableBytesInSSL because        // SSL_pending will return 0 if 
OpenSSL has not started the current TLS record        // See 
https://www.openssl.org/docs/manmaster/ssl/SSL_pending.html        int 
lastPrimingReadResult = SSL.readFromSSL(ssl, EMPTY_ADDR, 0); // priming read    
    // check if SSL_read returned <= 0. In this case we need to check the error 
and see if it was something        // fatal.        if (lastPrimingReadResult 
<= 0) {            // Check for OpenSSL errors caused by the priming read       
     long error = SSL.getLastErrorNumber();            if (error != 
SSL.SSL_ERROR_NONE) {                String err = SSL.getErrorString(error);    
            if (logger.isDebugEnabled()) {                    
logger.debug(sm.getString("engine.readFromSSLFailed", Long.toString(error),     
                       Integer.toString(lastPrimingReadResult), err));          
      }                // There was an internal error -- shutdown               
 shutdown();                throw new SSLException(err);            }        }  
      return SSL.pendingReadableBytesInSSL(ssl); }
The exception is thrown because OpenSSL has already set an error for 
verification failed. But there is still data (alert data with first byte 21) in 
BIO that has not been transferred.
For my application a clean shutdown is a critical requirement. Is there 
anything already in discussion about this issue or should i report as a bug?

Kind Regards,
Rashid Mahmood

Reply via email to