fyi: RFC 9525 obsoletes commonName check
Steffen Nurpmeso
steffen at sdaoden.eu
Fri Nov 17 23:01:24 UTC 2023
Viktor Dukhovni wrote in
<ZVfL71uXm9bO-ozv at straasha.imrryr.org>:
|On Fri, Nov 17, 2023 at 07:15:11PM +0100, Steffen Nurpmeso wrote:
|
|> RFC 9525 changes the way TLS certification is done:
|>
|> * The server identity can only be expressed in the subjectAltNames
|> extension; it is no longer valid to use the commonName RDN, known
|> as CN-ID in [VERIFY].
|>
|> Not such a big surprise as already the book "Network Security with
|> OpenSSL" (O'Reilly, ISBN 0-596-00270-X, June 2002; Thank you!)
|> states:
|>
|> The common practice with X.509v1 certificates was to put the
|> FQDN in the certificate's commonName field of the subjectName
|> field. This practice is no longer recommended for new
|> applications since X.509v3 allows certificate extensions to hold
|> the FQDN as well as other identifying information, such as IP
|> address. The proper place for the FQDN is in the dNSName field
|> of the subjectAltName extension.
|>
|> Nonetheless commonName is tested (and sometimes even falsely in
|> addition to subjectAltName, as just recently fixed for the MUA
|> i maintain (then removed entirely as a fixup)).
|
|Is this is an observation, feature requestion, bug report or something
|else? The documentation of X509_check_host(3) includes:
Oh! Wait!! I have no idea of how OpenSSL does that, i was
talking about software which implements a verify callback.
Interesting, actually, i did not know this function exists, or
have it forgotten. Do you know a software which uses it??
(Except openssl / libcrypto itself?) Hm, usr.sbin/rpc.tlsservd of
FreeBSD does, other than that no software of any BSD nor those
which i track via git uses it.
| The flags argument is usually 0. It can be the bitwise OR of the
| flags:
|
| X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT,
| X509_CHECK_FLAG_NEVER_CHECK_SUBJECT,
| X509_CHECK_FLAG_NO_WILDCARDS,
| X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS,
| X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS.
| X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS.
|
| The X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT flag causes the function to
| consider the subject DN even if the certificate contains at \
| least one
| subject alternative name of the right type (DNS name or email \
| address
| as appropriate); the default is to ignore the subject DN when \
| at least
| one corresponding subject alternative names is present.
|
| The X509_CHECK_FLAG_NEVER_CHECK_SUBJECT flag causes the function to
| never consider the subject DN even if the certificate contains no
| subject alternative names of the right type (DNS name or email \
| address
| as appropriate); the default is to use the subject DN when no
| corresponding subject alternative names are present. If both
| X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT and
| X509_CHECK_FLAG_NEVER_CHECK_SUBJECT are specified, the latter takes
| precedence and the subject DN is not checked for matching names.
|
|In practice, applications should not use X509_check_host(3) directly,
|and instead configure the verify parameters that will be used for
|build-in checks:
|
| X509_VERIFY_PARAM_set1_host(3):
That is used by some more. Unbound, usr.bin/ftp/ of NetBSD.
Hm. :)
| When a hostname is specified, certificate verification automatically
| invokes X509_check_host(3) with flags equal to the flags argument \
| given
| to X509_VERIFY_PARAM_set_hostflags() (default zero). Applications \
| are
| strongly advised to use this interface in preference to explicitly
| calling X509_check_host(3), hostname checks may be out of scope with
| the DANE-EE(3) certificate usage, and the internal check will be
| suppressed as appropriate when DANE verification is enabled.
|
|See also SSL_set_hostflags(3):
|
| SSL_set_hostflags() sets the flags that will be passed to
| X509_check_host(3) when name checks are applicable, by default the
| flags value is 0. See X509_check_host(3) for the list of available
| flags and their meaning.
|
|Are you asking for
|
| X509_CHECK_FLAG_NEVER_CHECK_SUBJECT
|
|to become the default? Should there then be a new flag to override the
|new default?
|
|How soon do we expect various non-public intramural certificate issuance
|processes to switch away from relying on the Subject CN and to be sure
|to always include a DNS (or perhaps email) SAN?
That is an interesting question.
|The new RFC is certainly fair warning to issuers that 20+ years on they
|**really** should no longer rely on the subject CN to carry the
|presented identifier. But when can OpenSSL realistically break
|backwards compatibility and start failing name checks for CN-only
|certificates?
I was really more about programs doing TLS verification.
Interesting that so few actually do it like you say, aka all the
above. I have to read about that!
--steffen
|
|Der Kragenbaer, The moon bear,
|der holt sich munter he cheerfully and one by one
|einen nach dem anderen runter wa.ks himself off
|(By Robert Gernhardt)
More information about the openssl-users
mailing list