]> Cypherpunks.ru repositories - gostls13.git/commit
crypto/x509: rework path building
authorRoland Shoemaker <roland@golang.org>
Wed, 2 Mar 2022 21:20:02 +0000 (13:20 -0800)
committerGopher Robot <gobot@golang.org>
Tue, 5 Apr 2022 17:00:25 +0000 (17:00 +0000)
commit65153e478e302eaf3556372ff257ebfc893943c1
treedeec33b22532683690c67d18e264feabd1b79f42
parent1a955bcdb701d788b048a39d7273621729e257bc
crypto/x509: rework path building

This change does four things:
  * removes the chain cache
  * during path building, equality is determined by checking if the
    subjects and public keys match, rather than checking if the entire
    certificates are equal
  * enforces EKU suitability during path building
  * enforces name constraints on intermediates and roots which have
    SANs during path building

The chain cache is removed as it was causing duplicate chains to be
returned, in some cases shadowing better, shorter chains if a longer
chain was found first.

Checking equality using the subjects and public keys, rather than the
entire certificates, allows the path builder to ignore chains which
contain cross-signature loops.

EKU checking is done during path building, as the previous behavior
of only checking EKUs once the path had been built caused the path
builder to incorrectly ignore valid paths when it encountered a path
which would later be ruled invalid because of unacceptable EKU usage.

Name constraints are applied uniformly across all certificates, not
just leaves, in order to be more consistent.

Fixes #48869
Fixes #45856

Change-Id: I4ca1cd43510d061e148f953d6c1ed935100fdb10
Reviewed-on: https://go-review.googlesource.com/c/go/+/389555
Reviewed-by: Damien Neil <dneil@google.com>
Trust: Cherry Mui <cherryyz@google.com>
Trust: Roland Shoemaker <roland@golang.org>
Run-TryBot: Roland Shoemaker <roland@golang.org>
Auto-Submit: Roland Shoemaker <roland@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
src/crypto/x509/verify.go
src/crypto/x509/verify_test.go