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-3.0.20 ❌ (unexpected failure) EE certificate key too weak
openssl-3.2.6 ❌ (unexpected failure) EE certificate key too weak
gnutls-certtool-3.8.3 ❌ (unexpected failure) Chain verification output: Not verified. The certificate is NOT trusted.
certvalidator-0.11.1 ❌ (unexpected failure) Hash algorithm not known for 2.16.840.1.101.3.4.3.17
openssl-3.6.2 N/A
rust-webpki ❌ (unexpected failure) UnknownIssuer
libressl-4.3.1 ❌ (unexpected failure) EE certificate key too weak
libressl-4.1.2 ❌ (unexpected failure) EE certificate key too weak
openssl-3.5.6 N/A
libressl-4.2.1 ❌ (unexpected failure) EE certificate key too weak
boringssl-legacy-40 N/A
aws-lc-1.72.0 N/A
openssl-1.1 ❌ (unexpected failure) EE certificate key too weak
gocryptox509-go1.26.5 ❌ (unexpected failure) validation: x509: certificate signed by unknown authority
openssl-3.4.5 ❌ (unexpected failure) EE certificate key too weak
rustls-webpki ❌ (unexpected failure) UnsupportedSignatureAlgorithmContext(UnsupportedSignatureAlgorithmContext { signature_algorithm_id: [6, 9, 96, 134, 72, 1, 101, 3, 4, 3, 17], supported_algorithms: [0x06082a8648ce3d040302, 0x06082a8648ce3d040303, 0x06092a864886f70d01010b0500, 0x06092a864886f70d01010c0500, 0x06092a864886f70d01010d0500, 0x06092a864886f70d01010a3034a00f300d06096086480165030402010500a11c301a06092a864886f70d010108300d06096086480165030402010500a203020120, 0x06092a864886f70d01010a3034a00f300d06096086480165030402020500a11c301a06092a864886f70d010108300d06096086480165030402020500a203020130, 0x06092a864886f70d01010a3034a00f300d06096086480165030402030500a11c301a06092a864886f70d010108300d06096086480165030402030500a203020140] })
openssl-3.3.7 ❌ (unexpected failure) EE certificate key too weak
libressl-3.9.2 ❌ (unexpected failure) EE certificate key too weak
pyca-cryptography-49.0.0 ❌ (unexpected failure) validation failed: candidates exhausted: Forbidden public key algorithm: AlgorithmIdentifier { oid: DefinedByMarker(PhantomData), params: MlDsa44 }
libressl-4.0.1 ❌ (unexpected failure) EE certificate key too weak
openssl-4.0.0 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-3.0.20 ❌ (unexpected failure) EE certificate key too weak
openssl-3.2.6 ❌ (unexpected failure) EE certificate key too weak
gnutls-certtool-3.8.3 ❌ (unexpected failure) Chain verification output: Not verified. The certificate is NOT trusted.
certvalidator-0.11.1 ❌ (unexpected failure) Hash algorithm not known for 2.16.840.1.101.3.4.3.18
openssl-3.6.2 N/A
rust-webpki ❌ (unexpected failure) UnknownIssuer
libressl-4.3.1 ❌ (unexpected failure) EE certificate key too weak
libressl-4.1.2 ❌ (unexpected failure) EE certificate key too weak
openssl-3.5.6 N/A
libressl-4.2.1 ❌ (unexpected failure) EE certificate key too weak
boringssl-legacy-40 N/A
aws-lc-1.72.0 N/A
openssl-1.1 ❌ (unexpected failure) EE certificate key too weak
gocryptox509-go1.26.5 ❌ (unexpected failure) validation: x509: certificate signed by unknown authority
openssl-3.4.5 ❌ (unexpected failure) EE certificate key too weak
rustls-webpki ❌ (unexpected failure) UnsupportedSignatureAlgorithmContext(UnsupportedSignatureAlgorithmContext { signature_algorithm_id: [6, 9, 96, 134, 72, 1, 101, 3, 4, 3, 18], supported_algorithms: [0x06082a8648ce3d040302, 0x06082a8648ce3d040303, 0x06092a864886f70d01010b0500, 0x06092a864886f70d01010c0500, 0x06092a864886f70d01010d0500, 0x06092a864886f70d01010a3034a00f300d06096086480165030402010500a11c301a06092a864886f70d010108300d06096086480165030402010500a203020120, 0x06092a864886f70d01010a3034a00f300d06096086480165030402020500a11c301a06092a864886f70d010108300d06096086480165030402020500a203020130, 0x06092a864886f70d01010a3034a00f300d06096086480165030402030500a11c301a06092a864886f70d010108300d06096086480165030402030500a203020140] })
openssl-3.3.7 ❌ (unexpected failure) EE certificate key too weak
libressl-3.9.2 ❌ (unexpected failure) EE certificate key too weak
pyca-cryptography-49.0.0 ❌ (unexpected failure) validation failed: candidates exhausted: Forbidden public key algorithm: AlgorithmIdentifier { oid: DefinedByMarker(PhantomData), params: MlDsa65 }
libressl-4.0.1 ❌ (unexpected failure) EE certificate key too weak
openssl-4.0.0 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-3.0.20 ❌ (unexpected failure) EE certificate key too weak
openssl-3.2.6 ❌ (unexpected failure) EE certificate key too weak
gnutls-certtool-3.8.3 ❌ (unexpected failure) Chain verification output: Not verified. The certificate is NOT trusted.
certvalidator-0.11.1 ❌ (unexpected failure) Hash algorithm not known for 2.16.840.1.101.3.4.3.19
openssl-3.6.2 N/A
rust-webpki ❌ (unexpected failure) UnknownIssuer
libressl-4.3.1 ❌ (unexpected failure) EE certificate key too weak
libressl-4.1.2 ❌ (unexpected failure) EE certificate key too weak
openssl-3.5.6 N/A
libressl-4.2.1 ❌ (unexpected failure) EE certificate key too weak
boringssl-legacy-40 N/A
aws-lc-1.72.0 N/A
openssl-1.1 ❌ (unexpected failure) EE certificate key too weak
gocryptox509-go1.26.5 ❌ (unexpected failure) validation: x509: certificate signed by unknown authority
openssl-3.4.5 ❌ (unexpected failure) EE certificate key too weak
rustls-webpki ❌ (unexpected failure) UnsupportedSignatureAlgorithmContext(UnsupportedSignatureAlgorithmContext { signature_algorithm_id: [6, 9, 96, 134, 72, 1, 101, 3, 4, 3, 19], supported_algorithms: [0x06082a8648ce3d040302, 0x06082a8648ce3d040303, 0x06092a864886f70d01010b0500, 0x06092a864886f70d01010c0500, 0x06092a864886f70d01010d0500, 0x06092a864886f70d01010a3034a00f300d06096086480165030402010500a11c301a06092a864886f70d010108300d06096086480165030402010500a203020120, 0x06092a864886f70d01010a3034a00f300d06096086480165030402020500a11c301a06092a864886f70d010108300d06096086480165030402020500a203020130, 0x06092a864886f70d01010a3034a00f300d06096086480165030402030500a11c301a06092a864886f70d010108300d06096086480165030402030500a203020140] })
openssl-3.3.7 ❌ (unexpected failure) EE certificate key too weak
libressl-3.9.2 ❌ (unexpected failure) EE certificate key too weak
pyca-cryptography-49.0.0 ❌ (unexpected failure) validation failed: candidates exhausted: Forbidden public key algorithm: AlgorithmIdentifier { oid: DefinedByMarker(PhantomData), params: MlDsa87 }
libressl-4.0.1 ❌ (unexpected failure) EE certificate key too weak
openssl-4.0.0 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-3.0.20 EE certificate key too weak
openssl-3.2.6 EE certificate key too weak
gnutls-certtool-3.8.3 Chain verification output: Not verified. The certificate is NOT trusted.
certvalidator-0.11.1 Hash algorithm not known for 2.16.840.1.101.3.4.3.17
openssl-3.6.2 certificate signature failure
rust-webpki UnknownIssuer
libressl-4.3.1 EE certificate key too weak
libressl-4.1.2 EE certificate key too weak
openssl-3.5.6 certificate signature failure
libressl-4.2.1 EE certificate key too weak
boringssl-legacy-40 certificate signature failure
aws-lc-1.72.0 certificate signature failure
openssl-1.1 EE certificate key too weak
gocryptox509-go1.26.5 N/A
openssl-3.4.5 EE certificate key too weak
rustls-webpki UnsupportedSignatureAlgorithmContext(UnsupportedSignatureAlgorithmContext { signature_algorithm_id: [6, 9, 96, 134, 72, 1, 101, 3, 4, 3, 17], supported_algorithms: [0x06082a8648ce3d040302, 0x06082a8648ce3d040303, 0x06092a864886f70d01010b0500, 0x06092a864886f70d01010c0500, 0x06092a864886f70d01010d0500, 0x06092a864886f70d01010a3034a00f300d06096086480165030402010500a11c301a06092a864886f70d010108300d06096086480165030402010500a203020120, 0x06092a864886f70d01010a3034a00f300d06096086480165030402020500a11c301a06092a864886f70d010108300d06096086480165030402020500a203020130, 0x06092a864886f70d01010a3034a00f300d06096086480165030402030500a11c301a06092a864886f70d010108300d06096086480165030402030500a203020140] })
openssl-3.3.7 EE certificate key too weak
libressl-3.9.2 EE certificate key too weak
pyca-cryptography-49.0.0 validation failed: candidates exhausted: Forbidden public key algorithm: AlgorithmIdentifier { oid: DefinedByMarker(PhantomData), params: MlDsa44 }
libressl-4.0.1 EE certificate key too weak
openssl-4.0.0 certificate signature failure

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-3.0.20 EE certificate key too weak
openssl-3.2.6 EE certificate key too weak
gnutls-certtool-3.8.3 Chain verification output: Not verified. The certificate is NOT trusted.
certvalidator-0.11.1 Hash algorithm not known for 2.16.840.1.101.3.4.3.17
openssl-3.6.2 ❌ (unexpected success) N/A
rust-webpki UnknownIssuer
libressl-4.3.1 EE certificate key too weak
libressl-4.1.2 EE certificate key too weak
openssl-3.5.6 ❌ (unexpected success) N/A
libressl-4.2.1 EE certificate key too weak
boringssl-legacy-40 ❌ (unexpected success) N/A
aws-lc-1.72.0 ❌ (unexpected success) N/A
openssl-1.1 EE certificate key too weak
gocryptox509-go1.26.5 N/A
openssl-3.4.5 EE certificate key too weak
rustls-webpki UnsupportedSignatureAlgorithmContext(UnsupportedSignatureAlgorithmContext { signature_algorithm_id: [6, 9, 96, 134, 72, 1, 101, 3, 4, 3, 17], supported_algorithms: [0x06082a8648ce3d040302, 0x06082a8648ce3d040303, 0x06092a864886f70d01010b0500, 0x06092a864886f70d01010c0500, 0x06092a864886f70d01010d0500, 0x06092a864886f70d01010a3034a00f300d06096086480165030402010500a11c301a06092a864886f70d010108300d06096086480165030402010500a203020120, 0x06092a864886f70d01010a3034a00f300d06096086480165030402020500a11c301a06092a864886f70d010108300d06096086480165030402020500a203020130, 0x06092a864886f70d01010a3034a00f300d06096086480165030402030500a11c301a06092a864886f70d010108300d06096086480165030402030500a203020140] })
openssl-3.3.7 EE certificate key too weak
libressl-3.9.2 EE certificate key too weak
pyca-cryptography-49.0.0 🚧 testcase skipped (explicit unsupported feature)
libressl-4.0.1 EE certificate key too weak
openssl-4.0.0 ❌ (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-3.0.20 EE certificate key too weak
openssl-3.2.6 EE certificate key too weak
gnutls-certtool-3.8.3 Chain verification output: Not verified. The certificate is NOT trusted.
certvalidator-0.11.1 Hash algorithm not known for 2.16.840.1.101.3.4.3.17
openssl-3.6.2 ❌ (unexpected success) N/A
rust-webpki UnknownIssuer
libressl-4.3.1 EE certificate key too weak
libressl-4.1.2 EE certificate key too weak
openssl-3.5.6 ❌ (unexpected success) N/A
libressl-4.2.1 EE certificate key too weak
boringssl-legacy-40 ❌ (unexpected success) N/A
aws-lc-1.72.0 ❌ (unexpected success) N/A
openssl-1.1 EE certificate key too weak
gocryptox509-go1.26.5 N/A
openssl-3.4.5 EE certificate key too weak
rustls-webpki UnsupportedSignatureAlgorithmContext(UnsupportedSignatureAlgorithmContext { signature_algorithm_id: [6, 9, 96, 134, 72, 1, 101, 3, 4, 3, 17], supported_algorithms: [0x06082a8648ce3d040302, 0x06082a8648ce3d040303, 0x06092a864886f70d01010b0500, 0x06092a864886f70d01010c0500, 0x06092a864886f70d01010d0500, 0x06092a864886f70d01010a3034a00f300d06096086480165030402010500a11c301a06092a864886f70d010108300d06096086480165030402010500a203020120, 0x06092a864886f70d01010a3034a00f300d06096086480165030402020500a11c301a06092a864886f70d010108300d06096086480165030402020500a203020130, 0x06092a864886f70d01010a3034a00f300d06096086480165030402030500a11c301a06092a864886f70d010108300d06096086480165030402030500a203020140] })
openssl-3.3.7 EE certificate key too weak
libressl-3.9.2 EE certificate key too weak
pyca-cryptography-49.0.0 🚧 testcase skipped (explicit unsupported feature)
libressl-4.0.1 EE certificate key too weak
openssl-4.0.0 ❌ (unexpected success) N/A