]> git.kaiwu.me - nginx.git/commitdiff
SSL: abort handshake on SSL_set_SSL_CTX() errors.
authorSergey Kandaurov <pluknet@nginx.com>
Thu, 24 Sep 2020 12:51:29 +0000 (13:51 +0100)
committerSergey Kandaurov <pluknet@nginx.com>
Thu, 24 Sep 2020 12:51:29 +0000 (13:51 +0100)
In rare cases, such as memory allocation failure, SSL_set_SSL_CTX() returns
NULL, which could mean that a different SSL configuration has not been set.
Note that this new behaviour seemingly originated in OpenSSL-1.1.0 release.

src/http/ngx_http_request.c

index f80785d8f0eaabd119d60f2e9fa9ce21afb1d8bd..2a0528c68345bebbf4d8bfdaf00a10c87adecb96 100644 (file)
@@ -932,7 +932,10 @@ ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg)
     c->ssl->buffer_size = sscf->buffer_size;
 
     if (sscf->ssl.ctx) {
-        SSL_set_SSL_CTX(ssl_conn, sscf->ssl.ctx);
+        if (SSL_set_SSL_CTX(ssl_conn, sscf->ssl.ctx) == NULL) {
+            *ad = SSL_AD_INTERNAL_ERROR;
+            return SSL_TLSEXT_ERR_ALERT_FATAL;
+        }
 
         /*
          * SSL_set_SSL_CTX() only changes certs as of 1.0.0d