]> git.kaiwu.me - nginx.git/commitdiff
SSL: avoid matching IP addresses in dNSName and commonName
authorEugene Grebenschikov <e.grebenshchikov@f5.com>
Mon, 21 Sep 2026 20:32:36 +0000 (13:32 -0700)
committerEugene <54681898+jimf5@users.noreply.github.com>
Thu, 24 Sep 2026 19:33:26 +0000 (12:33 -0700)
OpenSSL 1.0.2+ validates IP addresses only against iPAddress
subjectAltName entries via X509_check_ip().  For older OpenSSL
versions, equivalent validation is now performed.

Note that dNSName entries are still logged when checking an IP
address, they are not used for matching.

Co-authored-by: Sergey Kandaurov <pluknet@nginx.com>
src/event/ngx_event_openssl.c

index e94433bd39fd4b3630e66bdad159ea6cc2e84796..e4250ee09fc4e6e44f91edfd12a70e31b6c09752 100644 (file)
@@ -5415,7 +5415,7 @@ ngx_ssl_check_host(ngx_connection_t *c, ngx_str_t *name)
                                (size_t) ASN1_STRING_length(str),
                                ASN1_STRING_data(str));
 
-                if (ngx_ssl_check_name(name, str) == NGX_OK) {
+                if (addr == NULL && ngx_ssl_check_name(name, str) == NGX_OK) {
                     ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,
                                    "SSL subjectAltName: match");
                     GENERAL_NAMES_free(altnames);
@@ -5479,6 +5479,12 @@ ngx_ssl_check_host(ngx_connection_t *c, ngx_str_t *name)
      * CN, both Apache and OpenSSL check all CNs, and so do we.
      */
 
+    if (addr) {
+        ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,
+                       "SSL commonName: no match");
+        goto failed;
+    }
+
     sname = X509_get_subject_name(cert);
 
     if (sname == NULL) {