Testing post-quantum TLS in the Browser
The post-quantum TLS demo is intended to demonstrate TLS 1.3 with ML-DSA-65 authentication and hybrid X25519MLKEM768 key exchange.
Its private certificate authority is separate from the public certificate authorities your browser normally trusts.
To test certificate validation, you must temporarily trust the demo root CA.
|
Trusting a CA changes who can authenticate websites to your browser. Anyone who controls this CA’s signing keys, or the keys of a subordinate CA, can issue certificates that your browser may accept. If that authority is misused or compromised, an attacker who can redirect your traffic could impersonate HTTPS websites or intercept sensitive information. This trust is not limited to Use a disposable virtual machine or a dedicated test device. A separate browser profile or an incognito window does not necessarily isolate certificates trusted by the operating system. Avoid sensitive browsing in the test environment. Do not add this demo CA to a shared or production trust store. Remove the demo CA immediately after testing. Closing the page or deleting the downloaded certificate file does not remove installed trust. |
Preparing your Test Environment
-
Use a disposable virtual machine or a dedicated test device where you can add and remove trusted certificates.
-
Install a current desktop version of Google Chrome, version 150 or later. Support for ML-DSA certificates and certificate import depends on the operating system and browser build. This guide does not establish support for Chrome on iOS or other browsers.
-
Open this guide through docs.mtg.de using its normal, publicly trusted HTTPS connection. If that connection shows a certificate warning, stop.
-
Check that you are permitted to change the test environment’s trust settings.
If a managed browser prevents the import, use an approved test environment rather than bypassing the restriction.
Downloading and verifying the root CA Certificate
The root certificate has these identifying properties:
| Property | Expected value |
|---|---|
Subject |
|
Public key and certificate signature |
ML-DSA-65 |
Validity, UTC |
1 October 2026 to 1 October 2036 |
SHA-256 certificate fingerprint |
|
Before importing the certificate, compare its SHA-256 fingerprint with the value above. Use the certificate viewer, or run this command with an OpenSSL build that can read ML-DSA certificates:
openssl x509 -in mtg-ml-dsa-65-root-ca.pem -noout -fingerprint -sha256
| This is the fingerprint of the certificate, not a checksum of the PEM file. If the fingerprint differs, stop and contact MTG through a known, independent channel. |
Trusting the root temporarily
-
Open
chrome://certificate-managerin the test browser. -
Find the certificate import option for user-managed trusted CAs. The labels and available options vary by operating system and Chrome version. If Chrome uses the operating system’s certificate manager, record which trust store you change.
-
Import
mtg-ml-dsa-65-root-ca.pem. Confirm its subject and fingerprint before accepting the import. -
If prompted for trust purposes, enable only the trust needed to authenticate websites. Do not enable additional trust purposes such as email signing or code signing.
-
Record the certificate’s name, fingerprint, and every trust store where it was added. You need these details to remove the correct certificate after testing.
-
Restart the test browser if the certificate manager requires it.
If the certificate manager rejects the certificate or does not support its algorithm, stop. Importing a CA cannot add ML-DSA support to an unsupported browser. Do not disable certificate verification or bypass certificate warnings to complete the test.
Opening the Demo and checking the Connection
-
Open pqc.docs.mtg.de/.
-
Confirm that the browser accepts the certificate without an error or a warning bypass.
-
Inspect the certificate chain in the browser’s connection information. The leaf must cover
pqc.docs.mtg.de, and the chain must lead to the root identified above. -
Where the browser exposes the details, check TLS 1.3, ML-DSA authentication, and
X25519MLKEM768key exchange separately.
A successful page load shows that the browser accepted the connection. It does not, by itself, prove which algorithms the connection negotiated. ML-DSA protects authentication; ML-KEM supplies the post-quantum part of the hybrid key exchange. The cipher suite name alone does not establish either property.
If the demo fails after import, stop and check the hostname, certificate chain, trust settings, and browser support. Do not add unrelated CAs or bypass the error. The ordinary documentation remains available at docs.mtg.de.
Removing the CA after testing
|
Remove this CA as soon as the test is complete. Its root certificate is valid until 2036. Ending your browser session does not end the trust you installed. |
-
Reopen the browser’s certificate manager and any operating system trust stores you changed.
-
Find
X.509 Root (ML-DSA-65)and confirm that its SHA-256 fingerprint matchesEB:8E:7E:89:69:42:7C:B7:A8:63:8B:AB:3B:9F:B1:40:C5:A2:27:80:30:F1:38:79:CD:05:48:8A:A0:45:F5:83. -
Delete that imported certificate, or remove all trust you explicitly granted to it. Repeat this in every browser, user, or system trust store you modified. Take care not to remove unrelated certificates.
-
Close all instances of the test browser and start a new session.
-
Revisit pqc.docs.mtg.de/ to confirm that the demo chain is no longer trusted. Do not bypass the resulting certificate error. If the chain remains trusted, check for another copy of the demo root in the trust stores you changed.
-
Discard the disposable virtual machine if you used one.
Deleting the downloaded PEM files is optional housekeeping. It does not replace removal from the trust stores.