--- nginx-1.11.2/src/event/ngx_event_openssl.c 2016-07-05 08:56:15.000000000 -0700 +++ nginx-1.11.2-patched/src/event/ngx_event_openssl.c 2016-07-19 16:46:06.218017083 -0700 @@ -1306,6 +1306,25 @@ ngx_ssl_handshake(ngx_connection_t *c) return NGX_AGAIN; } +#if OPENSSL_VERSION_NUMBER >= 0x10002000L + if (sslerr == SSL_ERROR_WANT_X509_LOOKUP + || sslerr == SSL_ERROR_PENDING_SESSION) + { + c->read->handler = ngx_ssl_handshake_handler; + c->write->handler = ngx_ssl_handshake_handler; + + if (ngx_handle_read_event(c->read, 0) != NGX_OK) { + return NGX_ERROR; + } + + if (ngx_handle_write_event(c->write, 0) != NGX_OK) { + return NGX_ERROR; + } + + return NGX_AGAIN; + } +#endif + err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0; c->ssl->no_wait_shutdown = 1;