Do not permit multi-component wildcards on certificate names (OpenSSL, EXPERIMENTAL_C...
authorJeremy Harris <jgh146exb@wizmail.org>
Wed, 5 Nov 2014 18:24:00 +0000 (18:24 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Wed, 5 Nov 2014 19:02:19 +0000 (19:02 +0000)
doc/doc-txt/ChangeLog
doc/doc-txt/experimental-spec.txt
src/src/tls-openssl.c

index 5a298d161604b0db07acd6607946e99a9c176b94..997a459c80fa35adbce2f5f6550299b0af5ba4c5 100644 (file)
@@ -62,6 +62,11 @@ JH/08 Rename the TPDA expermimental facility to Event Actions.  The #ifdef
 TL/06 In test suite, disable OCSP for old versions of openssl which contained
       early OCSP support, but no stapling (appears to be less than 1.0.0).
 
+JH/09 When compiled with OpenSSL and EXPERIMENTAL_CERTNAMES, the checks on
+      server certificate names available under the smtp transport option
+      "tls_verify_cert_hostname" now do not permit multi-component wildcard
+      matches.
+
 
 Exim version 4.84
 -----------------
index faa64df68685d133acf8e2ea4999c8d7bda10dcd..266e198914d9e8b35ca5b1f8b9b2a095724d7ec7 100644 (file)
@@ -1144,6 +1144,8 @@ the next hop does not support DSN.
 Adding it to a redirect router makes no difference.
 
 
+
+
 Certificate name checking
 --------------------------------------------------------------
 The X509 certificates used for TLS are supposed be verified
@@ -1151,16 +1153,30 @@ that they are owned by the expected host.  The coding of TLS
 support to date has not made these checks.
 
 If built with EXPERIMENTAL_CERTNAMES defined, code is
-included to do so, and a new smtp transport option
-"tls_verify_cert_hostname" supported which takes a list of
-names for which the checks must be made.  The host must
-also be in "tls_verify_hosts".
+included to do so for server certificates, and a new smtp transport option
+"tls_verify_cert_hostnames" supported which takes a list of
+names for which the additional checks must be made.
+The option currently defaults to empty, but this may change in
+the future.  "*" is probably a suitable value.
+Whether certificate verification is done at all, and the result of
+it failing, is stll under the control of "tls_verify_hosts" nad
+"tls_try_verify_hosts".
 
 Both Subject and Subject-Alternate-Name certificate fields
 are supported, as are wildcard certificates (limited to
 a single wildcard being the initial component of a 3-or-more
 component FQDN).
 
+The equivalent check on the server for client certificates is not
+implemented.  At least one major email provider is using a client
+certificate which fails this check.  They do not retry either without
+hte client certificate or in clear.
+
+It is possible to duplicate the effect of this checking by
+creative use of Events.
+
+
+
 
 DANE
 ------------------------------------------------------------
@@ -1304,7 +1320,7 @@ in the delivery log line will show as "CV=dane".
 
 There is a new variable $tls_out_dane which will have "yes" if
 verification succeeded using DANE and "no" otherwise (only useful
-in combination with EXPERIMENTAL_TPDA), and a new variable
+in combination with EXPERIMENTAL_EVENT), and a new variable
 $tls_out_tlsa_usage (detailed above).
 
 
index fe1b208ac5b2e4d708b913e2f466e11733ad0450..63bf83b1dddc125ab5e03cea5c35c80676b66ea0 100644 (file)
@@ -369,6 +369,9 @@ else
 # if EXIM_HAVE_OPENSSL_CHECKHOST
 #  ifndef X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
 #   define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0
+#  endif
+#  ifndef X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
+#   define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0
 #  endif
     {
     int sep = 0;
@@ -377,7 +380,8 @@ else
     int rc;
     while ((name = string_nextinlist(&list, &sep, NULL, 0)))
       if ((rc = X509_check_host(cert, name, 0,
-                 X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS)))
+                 X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
+                 | X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS)))
        {
        if (rc < 0)
          {