Avoid expensive RFC 3779 checks during cert verification
authortb <tb@openbsd.org>
Thu, 21 Apr 2022 04:48:12 +0000 (04:48 +0000)
committertb <tb@openbsd.org>
Thu, 21 Apr 2022 04:48:12 +0000 (04:48 +0000)
commit1b14589d7355675ee5f0a7f48d40bc0065748e1b
tree73c727f2efe620697bc2af8036522fa661c6cf26
parent8ed36ed2bac086885e3e4e881f0ccdae91bf6df7
Avoid expensive RFC 3779 checks during cert verification

X509v3_{addr,asid}_is_canonical() check that the ipAddrBlocks and
autonomousSysIds extension conform to RFC 3779. These checks are not
cheap. Certs containing non-conformant extensions should not be
considered valid, so mark them with EXFLAG_INVALID while caching the
extension information in x509v3_cache_extensions(). This way the
expensive check while walking the chains during X509_verify_cert() is
replaced with a cheap check of the extension flags. This avoids a lot
of superfluous work when validating numerous certs with similar chains
against the same roots as is done in rpki-client.

Issue noticed and fix suggested by claudio
ok claudio inoguchi jsing
lib/libcrypto/x509/x509_addr.c
lib/libcrypto/x509/x509_asid.c
lib/libcrypto/x509/x509_purp.c