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 |
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 |
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 |
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 |
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 |