Skip to content

rfc9881🔗

rfc9881::ml-dsa-44🔗

Produces the following valid chain:

root -> EE

Both certificates convey ML-DSA-44 keys, and the root signs for the EE with its ML-DSA-44 key, as described in RFC 9881 3 and RFC 9881 4.

Expected result Validation kind Validation time Features Importance Conflicts
SUCCESS SERVER N/A has-mldsa undetermined N/A
Harness Result Context
openssl-1.1 ❌ (unexpected failure) EE certificate key too weak
openssl-3.5.8 N/A
openssl-4.0.2 N/A
certvalidator-0.11.1 ❌ (unexpected failure) Hash algorithm not known for 2.16.840.1.101.3.4.3.17
openssl-3.3.7 ❌ (unexpected failure) EE certificate key too weak
libressl-4.2.1 ❌ (unexpected failure) EE certificate key too weak
libressl-4.3.2 ❌ (unexpected failure) EE certificate key too weak
libressl-3.9.2 ❌ (unexpected failure) EE certificate key too weak
openssl-3.6.4 N/A
libressl-4.1.2 ❌ (unexpected failure) EE certificate key too weak
aws-lc-5.7.0 N/A
openssl-3.2.6 ❌ (unexpected failure) EE certificate key too weak
gocryptox509-go1.26.7 ❌ (unexpected failure) validation: x509: certificate signed by unknown authority
openssl-3.4.7 ❌ (unexpected failure) EE certificate key too weak
pyca-cryptography-50.0.1 chain built successfully
gnutls-certtool-3.8.3 ❌ (unexpected failure) Chain verification output: Not verified. The certificate is NOT trusted.
boringssl-legacy-43 N/A
libressl-4.0.1 ❌ (unexpected failure) EE certificate key too weak
openssl-3.0.22 ❌ (unexpected failure) EE certificate key too weak
rustls-webpki N/A

rfc9881::ml-dsa-65🔗

Produces the following valid chain:

root -> EE

Both certificates convey ML-DSA-65 keys, and the root signs for the EE with its ML-DSA-65 key, as described in RFC 9881 3 and RFC 9881 4.

Expected result Validation kind Validation time Features Importance Conflicts
SUCCESS SERVER N/A has-mldsa undetermined N/A
Harness Result Context
openssl-1.1 ❌ (unexpected failure) EE certificate key too weak
openssl-3.5.8 N/A
openssl-4.0.2 N/A
certvalidator-0.11.1 ❌ (unexpected failure) Hash algorithm not known for 2.16.840.1.101.3.4.3.18
openssl-3.3.7 ❌ (unexpected failure) EE certificate key too weak
libressl-4.2.1 ❌ (unexpected failure) EE certificate key too weak
libressl-4.3.2 ❌ (unexpected failure) EE certificate key too weak
libressl-3.9.2 ❌ (unexpected failure) EE certificate key too weak
openssl-3.6.4 N/A
libressl-4.1.2 ❌ (unexpected failure) EE certificate key too weak
aws-lc-5.7.0 N/A
openssl-3.2.6 ❌ (unexpected failure) EE certificate key too weak
gocryptox509-go1.26.7 ❌ (unexpected failure) validation: x509: certificate signed by unknown authority
openssl-3.4.7 ❌ (unexpected failure) EE certificate key too weak
pyca-cryptography-50.0.1 chain built successfully
gnutls-certtool-3.8.3 ❌ (unexpected failure) Chain verification output: Not verified. The certificate is NOT trusted.
boringssl-legacy-43 N/A
libressl-4.0.1 ❌ (unexpected failure) EE certificate key too weak
openssl-3.0.22 ❌ (unexpected failure) EE certificate key too weak
rustls-webpki N/A

rfc9881::ml-dsa-87🔗

Produces the following valid chain:

root -> EE

Both certificates convey ML-DSA-87 keys, and the root signs for the EE with its ML-DSA-87 key, as described in RFC 9881 3 and RFC 9881 4.

Expected result Validation kind Validation time Features Importance Conflicts
SUCCESS SERVER N/A has-mldsa undetermined N/A
Harness Result Context
openssl-1.1 ❌ (unexpected failure) EE certificate key too weak
openssl-3.5.8 N/A
openssl-4.0.2 N/A
certvalidator-0.11.1 ❌ (unexpected failure) Hash algorithm not known for 2.16.840.1.101.3.4.3.19
openssl-3.3.7 ❌ (unexpected failure) EE certificate key too weak
libressl-4.2.1 ❌ (unexpected failure) EE certificate key too weak
libressl-4.3.2 ❌ (unexpected failure) EE certificate key too weak
libressl-3.9.2 ❌ (unexpected failure) EE certificate key too weak
openssl-3.6.4 N/A
libressl-4.1.2 ❌ (unexpected failure) EE certificate key too weak
aws-lc-5.7.0 N/A
openssl-3.2.6 ❌ (unexpected failure) EE certificate key too weak
gocryptox509-go1.26.7 ❌ (unexpected failure) validation: x509: certificate signed by unknown authority
openssl-3.4.7 ❌ (unexpected failure) EE certificate key too weak
pyca-cryptography-50.0.1 chain built successfully
gnutls-certtool-3.8.3 ❌ (unexpected failure) Chain verification output: Not verified. The certificate is NOT trusted.
boringssl-legacy-43 N/A
libressl-4.0.1 ❌ (unexpected failure) EE certificate key too weak
openssl-3.0.22 ❌ (unexpected failure) EE certificate key too weak
rustls-webpki N/A

rfc9881::ml-dsa-44-bad-signature🔗

Produces the following invalid chain:

root -> EE

The EE certificate names the root as its issuer, but is signed with an ML-DSA-44 key that isn't the root's. Implementations that don't actually verify ML-DSA signatures will accept this chain.

Expected result Validation kind Validation time Features Importance Conflicts
FAILURE SERVER N/A has-mldsa undetermined N/A
Harness Result Context
openssl-1.1 EE certificate key too weak
openssl-3.5.8 certificate signature failure
openssl-4.0.2 certificate signature failure
certvalidator-0.11.1 Hash algorithm not known for 2.16.840.1.101.3.4.3.17
openssl-3.3.7 EE certificate key too weak
libressl-4.2.1 EE certificate key too weak
libressl-4.3.2 EE certificate key too weak
libressl-3.9.2 EE certificate key too weak
openssl-3.6.4 certificate signature failure
libressl-4.1.2 EE certificate key too weak
aws-lc-5.7.0 certificate signature failure
openssl-3.2.6 EE certificate key too weak
gocryptox509-go1.26.7 N/A
openssl-3.4.7 EE certificate key too weak
pyca-cryptography-50.0.1 validation failed: candidates exhausted: signature does not match
gnutls-certtool-3.8.3 Chain verification output: Not verified. The certificate is NOT trusted.
boringssl-legacy-43 certificate signature failure
libressl-4.0.1 EE certificate key too weak
openssl-3.0.22 EE certificate key too weak
rustls-webpki InvalidSignatureForPublicKey

rfc9881::ml-dsa-44-key-encipherment🔗

Produces the following invalid chain:

root -> EE

The EE conveys an ML-DSA-44 key, but asserts keyEncipherment in its keyUsage extension. ML-DSA keys can't encrypt data, so this is forbidden under RFC 9881 5:

ML-DSA subject public keys cannot be used to establish keys or encrypt data, so the keyUsage extension MUST NOT have any of the following bits set: keyEncipherment, dataEncipherment, keyAgreement, encipherOnly, decipherOnly

Most implementations don't check the asserted key usages against the subject key's type, and will accept this chain.

Expected result Validation kind Validation time Features Importance Conflicts
FAILURE SERVER N/A has-mldsa, pedantic-rfc5280 low N/A
Harness Result Context
openssl-1.1 EE certificate key too weak
openssl-3.5.8 ❌ (unexpected success) N/A
openssl-4.0.2 ❌ (unexpected success) N/A
certvalidator-0.11.1 Hash algorithm not known for 2.16.840.1.101.3.4.3.17
openssl-3.3.7 EE certificate key too weak
libressl-4.2.1 EE certificate key too weak
libressl-4.3.2 EE certificate key too weak
libressl-3.9.2 EE certificate key too weak
openssl-3.6.4 ❌ (unexpected success) N/A
libressl-4.1.2 EE certificate key too weak
aws-lc-5.7.0 ❌ (unexpected success) N/A
openssl-3.2.6 EE certificate key too weak
gocryptox509-go1.26.7 N/A
openssl-3.4.7 EE certificate key too weak
pyca-cryptography-50.0.1 🚧 testcase skipped (explicit unsupported feature)
gnutls-certtool-3.8.3 Chain verification output: Not verified. The certificate is NOT trusted.
boringssl-legacy-43 ❌ (unexpected success) N/A
libressl-4.0.1 EE certificate key too weak
openssl-3.0.22 EE certificate key too weak
rustls-webpki ❌ (unexpected success) N/A

rfc9881::ml-dsa-44-key-agreement🔗

Produces the following invalid chain:

root -> EE

The EE conveys an ML-DSA-44 key, but asserts keyAgreement in its keyUsage extension. ML-DSA keys can't establish keys, so this is forbidden under RFC 9881 5:

ML-DSA subject public keys cannot be used to establish keys or encrypt data, so the keyUsage extension MUST NOT have any of the following bits set: keyEncipherment, dataEncipherment, keyAgreement, encipherOnly, decipherOnly

Most implementations don't check the asserted key usages against the subject key's type, and will accept this chain.

Expected result Validation kind Validation time Features Importance Conflicts
FAILURE SERVER N/A has-mldsa, pedantic-rfc5280 low N/A
Harness Result Context
openssl-1.1 EE certificate key too weak
openssl-3.5.8 ❌ (unexpected success) N/A
openssl-4.0.2 ❌ (unexpected success) N/A
certvalidator-0.11.1 Hash algorithm not known for 2.16.840.1.101.3.4.3.17
openssl-3.3.7 EE certificate key too weak
libressl-4.2.1 EE certificate key too weak
libressl-4.3.2 EE certificate key too weak
libressl-3.9.2 EE certificate key too weak
openssl-3.6.4 ❌ (unexpected success) N/A
libressl-4.1.2 EE certificate key too weak
aws-lc-5.7.0 ❌ (unexpected success) N/A
openssl-3.2.6 EE certificate key too weak
gocryptox509-go1.26.7 N/A
openssl-3.4.7 EE certificate key too weak
pyca-cryptography-50.0.1 🚧 testcase skipped (explicit unsupported feature)
gnutls-certtool-3.8.3 Chain verification output: Not verified. The certificate is NOT trusted.
boringssl-legacy-43 ❌ (unexpected success) N/A
libressl-4.0.1 EE certificate key too weak
openssl-3.0.22 EE certificate key too weak
rustls-webpki ❌ (unexpected success) N/A