Skip to content

pathological🔗

pathological::multiple-chains-expired-intermediate🔗

Produces the following chain:

root 2 -> intermediate (expired) -> root -> EE

Both roots are trusted. A chain should be built successfully, disregarding the expired intermediate certificate and the second root. This scenario is known as the "chain of pain"; for further reference, see https://www.agwa.name/blog/post/fixing_the_addtrust_root_expiration.

Expected result Validation kind Validation time Features Importance Conflicts Download
SUCCESS SERVER N/A N/A undetermined N/A PEM bundle
Harness Result Context
gnutls-certtool-3.7.3 ❌ (unexpected failure) Chain verification output: Not verified. The certificate is NOT trusted. The certificate chain uses expired certificate.
openssl-3.0.15 N/A
openssl-3.3.2 N/A
openssl-3.2.3 N/A
rustls-webpki N/A
certvalidator-0.11.1 N/A
gocryptox509-go1.23.2 N/A
openssl-3.4.0 N/A
pyca-cryptography-43.0.3 N/A
openssl-3.1.7 N/A
openssl-1.1 N/A
rust-webpki N/A

pathological::intermediate-cycle-distinct-cas🔗

Produces the following invalid chain:

root -/-> (ICA' <-> ICA'') -> EE

ICA' and ICA'' are separate logical CAs that sign for each other. Neither chains up to the root.

Expected result Validation kind Validation time Features Importance Conflicts Download
FAILURE SERVER N/A N/A undetermined N/A PEM bundle
Harness Result Context
gnutls-certtool-3.7.3 Chain verification output: Not verified. The certificate is NOT trusted. The certificate issuer is unknown. The name in the certificate does not match the expected.
openssl-3.0.15 unable to get local issuer certificate
openssl-3.3.2 unable to get local issuer certificate
openssl-3.2.3 unable to get local issuer certificate
rustls-webpki UnknownIssuer
certvalidator-0.11.1 Unable to build a validation path for the certificate "Common Name: example.com" - no issuer matching "Common Name: intermediate-cycle-distinct-ca1" was found
gocryptox509-go1.23.2 N/A
openssl-3.4.0 unable to get local issuer certificate
pyca-cryptography-43.0.3 validation failed: CandidatesExhausted(Other("chain construction exceeds max depth"))
openssl-3.1.7 unable to get local issuer certificate
openssl-1.1 unable to get local issuer certificate
rust-webpki UnknownIssuer

pathological::intermediate-cycle-distinct-cas-max-depth🔗

Produces the following invalid chain:

root -/-> (ICA' <-> ICA'') -> EE

ICA' and ICA'' are separate logical CAs that sign for each other. Neither chains up to the root.

This testcase is identical to intermediate-cycle-distinct-cas, except that it specifies a large explicit max depth.

Expected result Validation kind Validation time Features Importance Conflicts Download
FAILURE SERVER N/A N/A undetermined N/A PEM bundle
Harness Result Context
gnutls-certtool-3.7.3 Chain verification output: Not verified. The certificate is NOT trusted. The certificate issuer is unknown. The name in the certificate does not match the expected.
openssl-3.0.15 unable to get local issuer certificate
openssl-3.3.2 unable to get local issuer certificate
openssl-3.2.3 unable to get local issuer certificate
rustls-webpki UnknownIssuer
certvalidator-0.11.1 Unable to build a validation path for the certificate "Common Name: example.com" - no issuer matching "Common Name: intermediate-cycle-distinct-ca1" was found
gocryptox509-go1.23.2 🚧 max chain depth not supported
openssl-3.4.0 unable to get local issuer certificate
pyca-cryptography-43.0.3 validation failed: CandidatesExhausted(Other("current depth calculation overflowed"))
openssl-3.1.7 unable to get local issuer certificate
openssl-1.1 unable to get local issuer certificate
rust-webpki UnknownIssuer

pathological::intermediate-cycle-same-logical-ca🔗

Produces the following invalid chain:

root -/-> (ICA <-> ICA) -> EE

The two ICA certificates are from the same logical CA (same subject), but have different keys and sign for each other, forming a cycle. Neither chains up to the root.

Expected result Validation kind Validation time Features Importance Conflicts Download
FAILURE SERVER N/A N/A undetermined N/A PEM bundle
Harness Result Context
gnutls-certtool-3.7.3 Chain verification output: Not verified. The certificate is NOT trusted. The certificate issuer is unknown. The name in the certificate does not match the expected.
openssl-3.0.15 unable to get local issuer certificate
openssl-3.3.2 unable to get local issuer certificate
openssl-3.2.3 unable to get local issuer certificate
rustls-webpki UnknownIssuer
certvalidator-0.11.1 Unable to build a validation path for the certificate "Common Name: example.com" - no issuer matching "Common Name: intermediate-cycle-same-logical-ca" was found
gocryptox509-go1.23.2 N/A
openssl-3.4.0 unable to get local issuer certificate
pyca-cryptography-43.0.3 validation failed: CandidatesExhausted(Other("Certificate is missing required extension"))
openssl-3.1.7 unable to get local issuer certificate
openssl-1.1 unable to get local issuer certificate
rust-webpki UnknownIssuer

pathological::nc-dos-1🔗

Produces the following pathological chain:

root [many constraints] -> EE [many names]

The root CA contains 2048 permits and excludes name constraints, which are checked against the EE's 2048 SANs and 2048 subjects. This is typically rejected by implementations due to quadratic blowup, but is technically valid.

This testcase is extended from OpenSSL's (many-names1.pem, many-constraints.pem) testcase, via https://github.com/openssl/openssl/pull/4393.

Expected result Validation kind Validation time Features Importance Conflicts Download
FAILURE SERVER N/A denial-of-service undetermined N/A PEM bundle
Harness Result Context
gnutls-certtool-3.7.3 ❌ (unexpected success) Chain verification output: Verified. The certificate is trusted.
openssl-3.0.15 unspecified certificate verification error
openssl-3.3.2 unspecified certificate verification error
openssl-3.2.3 unspecified certificate verification error
rustls-webpki leaf cert: X.509 parse failed
certvalidator-0.11.1 ❌ (unexpected success) N/A
gocryptox509-go1.23.2 N/A
openssl-3.4.0 unspecified certificate verification error
pyca-cryptography-43.0.3 validation failed: FatalError("Exceeded maximum name constraint check limit")
openssl-3.1.7 unspecified certificate verification error
openssl-1.1 unspecified certificate verification error
rust-webpki leaf cert: X.509 parse failed

pathological::nc-dos-2🔗

Produces the following pathological chain:

root [many constraints] -> EE [many names]

The root CA contains over 2048 permits and excludes name constraints, which are checked against the EE's 2048 SANs. This is typically rejected by implementations due to quadratic blowup, but is technically valid.

This testcase is extended from OpenSSL's (many-names2.pem, many-constraints.pem) testcase, via https://github.com/openssl/openssl/pull/4393.

Expected result Validation kind Validation time Features Importance Conflicts Download
FAILURE SERVER N/A denial-of-service undetermined N/A PEM bundle
Harness Result Context
gnutls-certtool-3.7.3 ❌ (unexpected success) Chain verification output: Verified. The certificate is trusted.
openssl-3.0.15 unspecified certificate verification error
openssl-3.3.2 unspecified certificate verification error
openssl-3.2.3 unspecified certificate verification error
rustls-webpki MaximumNameConstraintComparisonsExceeded
certvalidator-0.11.1 The path could not be validated because the end-entity certificate contains the following unsupported critical extension: subject_alt_name
gocryptox509-go1.23.2 N/A
openssl-3.4.0 unspecified certificate verification error
pyca-cryptography-43.0.3 validation failed: FatalError("Exceeded maximum name constraint check limit")
openssl-3.1.7 unspecified certificate verification error
openssl-1.1 unspecified certificate verification error
rust-webpki UnknownIssuer

pathological::nc-dos-3🔗

Produces the following pathological chain:

root [many constraints] -> EE [many names]

The root CA contains over 2048 permits and excludes name constraints, which are checked against the EE's 2048 subjects (not SANS). This is typically rejected by implementations due to quadratic blowup, but is technically valid.

This testcase is a reproduction of OpenSSL's (many-names3.pem, many-constraints.pem) testcase, via https://github.com/openssl/openssl/pull/4393.

Expected result Validation kind Validation time Features Importance Conflicts Download
FAILURE SERVER N/A denial-of-service undetermined N/A PEM bundle
Harness Result Context
gnutls-certtool-3.7.3 ❌ (unexpected success) Chain verification output: Verified. The certificate is trusted.
openssl-3.0.15 unspecified certificate verification error
openssl-3.3.2 unspecified certificate verification error
openssl-3.2.3 unspecified certificate verification error
rustls-webpki subject name validation failed
certvalidator-0.11.1 ❌ (unexpected success) N/A
gocryptox509-go1.23.2 N/A
openssl-3.4.0 unspecified certificate verification error
pyca-cryptography-43.0.3 validation failed: Other("Certificate is missing required extension")
openssl-3.1.7 unspecified certificate verification error
openssl-1.1 unspecified certificate verification error
rust-webpki UnknownIssuer