This is an automated email from the ASF dual-hosted git repository.

dsoumis pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/10.1.x by this push:
     new 86f36b37fb Replace runtime certificate generation with pre-generated 
fixtures
86f36b37fb is described below

commit 86f36b37fbc02c8700d6e1d4996215d18aa1f588
Author: Dimitris Soumis <[email protected]>
AuthorDate: Thu Nov 12 16:55:46 2026 +0200

    Replace runtime certificate generation with pre-generated fixtures
---
 .../tomcat/security/TestSecurity2018WebSocket.java |   8 +-
 .../tomcat/util/net/TestLargeClientHello.java      |  25 +-
 test/org/apache/tomcat/util/net/TestPQC.java       |  79 ++++--
 .../tomcat/util/net/TesterKeystoreGenerator.java   | 168 ------------
 test/org/apache/tomcat/util/net/TesterSupport.java |  10 +
 test/org/apache/tomcat/util/net/keystore-info.txt  |   6 +
 .../tomcat/util/net/localhost-mldsa-44-cert.pem    | 193 +++++++++++++
 .../tomcat/util/net/localhost-mldsa-44-key.pem     |  57 ++++
 .../tomcat/util/net/localhost-mldsa-65-cert.pem    | 249 +++++++++++++++++
 .../tomcat/util/net/localhost-mldsa-65-key.pem     |  88 ++++++
 .../tomcat/util/net/localhost-mldsa-87-cert.pem    | 305 +++++++++++++++++++++
 .../tomcat/util/net/localhost-mldsa-87-key.pem     | 106 +++++++
 .../tomcat/util/net/localhost-rsa-dnsonly.jks      | Bin 0 -> 4057 bytes
 .../tomcat/util/net/localhost-rsa-largecert.jks    | Bin 0 -> 21017 bytes
 .../tomcat/util/net/testuser-mldsa-65-cert.pem     | 247 +++++++++++++++++
 .../tomcat/util/net/testuser-mldsa-65-key.pem      |  88 ++++++
 16 files changed, 1401 insertions(+), 228 deletions(-)

diff --git a/test/org/apache/tomcat/security/TestSecurity2018WebSocket.java 
b/test/org/apache/tomcat/security/TestSecurity2018WebSocket.java
index 1b71bddd91..6d117b7def 100644
--- a/test/org/apache/tomcat/security/TestSecurity2018WebSocket.java
+++ b/test/org/apache/tomcat/security/TestSecurity2018WebSocket.java
@@ -17,7 +17,6 @@
 
 package org.apache.tomcat.security;
 
-import java.io.File;
 import java.net.URI;
 
 import javax.net.ssl.SSLContext;
@@ -34,7 +33,6 @@ import org.junit.Test;
 import org.apache.catalina.Context;
 import org.apache.catalina.servlets.DefaultServlet;
 import org.apache.catalina.startup.Tomcat;
-import org.apache.tomcat.util.net.TesterKeystoreGenerator;
 import org.apache.tomcat.util.net.TesterSupport;
 import org.apache.tomcat.websocket.TesterEchoServer;
 import org.apache.tomcat.websocket.TesterMessageCountClient;
@@ -45,13 +43,9 @@ public class TestSecurity2018WebSocket extends 
WebSocketBaseTest {
     // https://www.cve.org/CVERecord?id=CVE-2018-8034
     @Test(expected = DeploymentException.class)
     public void testCVE_2018_8034() throws Exception {
-        File keystoreFile = TesterKeystoreGenerator.generateKeystore(
-                "localhost", "tomcat",
-                new String[]{"localhost"}, null);
-
         Tomcat tomcat = getTomcatInstance();
 
-        TesterSupport.initSsl(tomcat, keystoreFile.getAbsolutePath(), false);
+        TesterSupport.initSsl(tomcat, TesterSupport.LOCALHOST_RSA_DNSONLY_JKS, 
false);
 
         Context ctx = getProgrammaticRootContext();
         ctx.addApplicationListener(TesterEchoServer.Config.class.getName());
diff --git a/test/org/apache/tomcat/util/net/TestLargeClientHello.java 
b/test/org/apache/tomcat/util/net/TestLargeClientHello.java
index a0dd7e092d..d3659c9aa7 100644
--- a/test/org/apache/tomcat/util/net/TestLargeClientHello.java
+++ b/test/org/apache/tomcat/util/net/TestLargeClientHello.java
@@ -17,7 +17,6 @@
 
 package org.apache.tomcat.util.net;
 
-import java.io.File;
 import java.io.OutputStream;
 import java.net.InetSocketAddress;
 import java.net.Socket;
@@ -32,41 +31,19 @@ import org.junit.Test;
 import org.apache.catalina.Context;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
-import org.bouncycastle.asn1.ASN1ObjectIdentifier;
-import org.bouncycastle.asn1.DERUTF8String;
-import org.bouncycastle.asn1.x509.BasicConstraints;
-import org.bouncycastle.asn1.x509.Extension;
-import org.bouncycastle.asn1.x509.KeyUsage;
-import org.bouncycastle.cert.jcajce.JcaX509ExtensionUtils;
 
 public class TestLargeClientHello extends TomcatBaseTest {
 
     // https://bz.apache.org/bugzilla/show_bug.cgi?id=67938
     @Test
     public void testLargeClientHelloWithSessionResumption() throws Exception {
-        File keystoreFile = 
TesterKeystoreGenerator.generateKeystore("localhost", "tomcat",
-            new String[]{"localhost", "*.localhost"},
-                (keyPair, certBuilder) -> {
-                JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils();
-                certBuilder.addExtension(Extension.subjectKeyIdentifier, false,
-                        
extUtils.createSubjectKeyIdentifier(keyPair.getPublic()));
-                certBuilder.addExtension(Extension.authorityKeyIdentifier, 
false,
-                        
extUtils.createAuthorityKeyIdentifier(keyPair.getPublic()));
-                certBuilder.addExtension(Extension.basicConstraints, true,
-                    new BasicConstraints(true));
-                certBuilder.addExtension(Extension.keyUsage, false,
-                    new KeyUsage(KeyUsage.digitalSignature | 
KeyUsage.keyEncipherment));
-                certBuilder.addExtension(new ASN1ObjectIdentifier("2.999"), 
false,
-                    new DERUTF8String("x".repeat(16922)));
-            });
-
         Tomcat tomcat = getTomcatInstance();
 
         Context ctx = getProgrammaticRootContext();
         Tomcat.addServlet(ctx, "hello", new HelloWorldServlet());
         ctx.addServletMapping("/", "hello");
 
-        TesterSupport.initSsl(tomcat, keystoreFile.getAbsolutePath(), false);
+        TesterSupport.initSsl(tomcat, 
TesterSupport.LOCALHOST_RSA_LARGECERT_JKS, false);
 
         try (LogCapture nioCapture = attachLogCapture(Level.FINE,
             "org.apache.tomcat.util.net.SecureNioChannel");
diff --git a/test/org/apache/tomcat/util/net/TestPQC.java 
b/test/org/apache/tomcat/util/net/TestPQC.java
index 1f0fb793eb..65e76f9720 100644
--- a/test/org/apache/tomcat/util/net/TestPQC.java
+++ b/test/org/apache/tomcat/util/net/TestPQC.java
@@ -101,22 +101,22 @@ public class TestPQC extends TomcatBaseTest {
 
     @Test
     public void testHostMLDSA44() throws Exception {
-        File[] pqcFiles = configureHostMLDSA("ML-DSA-44");
-        doTestWithOpenSSLClient(pqcFiles[0].getAbsolutePath(), null, null, 
null);
+        configureHostMLDSA("ML-DSA-44");
+        doTestWithOpenSSLClient(getCaCertificateFile().getAbsolutePath(), 
null, null, null);
     }
 
 
     @Test
     public void testHostMLDSA65() throws Exception {
-        File[] pqcFiles = configureHostMLDSA("ML-DSA-65");
-        doTestWithOpenSSLClient(pqcFiles[0].getAbsolutePath(), null, null, 
null);
+        configureHostMLDSA("ML-DSA-65");
+        doTestWithOpenSSLClient(getCaCertificateFile().getAbsolutePath(), 
null, null, null);
     }
 
 
     @Test
     public void testHostMLDSA87() throws Exception {
-        File[] pqcFiles = configureHostMLDSA("ML-DSA-87");
-        doTestWithOpenSSLClient(pqcFiles[0].getAbsolutePath(), null, null, 
null);
+        configureHostMLDSA("ML-DSA-87");
+        doTestWithOpenSSLClient(getCaCertificateFile().getAbsolutePath(), 
null, null, null);
     }
 
     @Test
@@ -137,7 +137,7 @@ public class TestPQC extends TomcatBaseTest {
     public void testHostRSAwithX25519MLKEM768() throws Exception {
         configureHostRSA();
         configureHostWithGroup("X25519MLKEM768");
-        doTestWithOpenSSLClient(new 
File(TesterSupport.CA_CERT_PEM).getAbsolutePath(),
+        doTestWithOpenSSLClient(getCaCertificateFile().getAbsolutePath(),
                 "X25519MLKEM768", null, null);
     }
 
@@ -146,7 +146,7 @@ public class TestPQC extends TomcatBaseTest {
     public void testHostRSAwithSecP256r1MLKEM768() throws Exception {
         configureHostRSA();
         configureHostWithGroup("SecP256r1MLKEM768");
-        doTestWithOpenSSLClient(new 
File(TesterSupport.CA_CERT_PEM).getAbsolutePath(),
+        doTestWithOpenSSLClient(getCaCertificateFile().getAbsolutePath(),
                 "SecP256r1MLKEM768", null, null);
     }
 
@@ -154,45 +154,43 @@ public class TestPQC extends TomcatBaseTest {
     public void testHostRSAwithSecP384r1MLKEM1024() throws Exception {
         configureHostRSA();
         configureHostWithGroup("SecP384r1MLKEM1024");
-        doTestWithOpenSSLClient(new 
File(TesterSupport.CA_CERT_PEM).getAbsolutePath(),
+        doTestWithOpenSSLClient(getCaCertificateFile().getAbsolutePath(),
                 "SecP384r1MLKEM1024", null, null);
     }
 
     @Test
     public void testHostMLDSAwithX25519MLKEM768() throws Exception {
-        File[] pqcFiles = configureHostMLDSA("ML-DSA-65");
+        configureHostMLDSA("ML-DSA-65");
         configureHostWithGroup("X25519MLKEM768");
-        doTestWithOpenSSLClient(pqcFiles[0].getAbsolutePath(), 
"X25519MLKEM768", null, null);
+        doTestWithOpenSSLClient(getCaCertificateFile().getAbsolutePath(), 
"X25519MLKEM768", null, null);
     }
 
     @Test
     public void testHostMLDSAwithSecP256r1MLKEM768() throws Exception {
-        File[] pqcFiles = configureHostMLDSA("ML-DSA-65");
+        configureHostMLDSA("ML-DSA-65");
         configureHostWithGroup("SecP256r1MLKEM768");
-        doTestWithOpenSSLClient(pqcFiles[0].getAbsolutePath(), 
"SecP256r1MLKEM768", null, null);
+        doTestWithOpenSSLClient(getCaCertificateFile().getAbsolutePath(), 
"SecP256r1MLKEM768", null, null);
     }
 
     @Test
     public void testClientMLDSA() throws Exception {
         configureHostRSA();
-        File[] clientFiles = 
TesterKeystoreGenerator.generatePQCCertificate("testuser", "ML-DSA-65",
-                null, null);
+        File[] clientFiles = getTestUserMLDSA65Files();
         SSLHostConfig sslHostConfig = 
getTomcatInstance().getConnector().findSslHostConfigs()[0];
         sslHostConfig.setCertificateVerification("required");
-        sslHostConfig.setCaCertificateFile(clientFiles[0].getAbsolutePath());
-        doTestWithOpenSSLClient(new 
File(TesterSupport.CA_CERT_PEM).getAbsolutePath(), null,
+        
sslHostConfig.setCaCertificateFile(getCaCertificateFile().getAbsolutePath());
+        doTestWithOpenSSLClient(getCaCertificateFile().getAbsolutePath(), null,
                 clientFiles[0].getAbsolutePath(), 
clientFiles[1].getAbsolutePath());
     }
 
     @Test
     public void testClientMLDSAwithMLDSAServer() throws Exception {
-        File[] serverFiles = configureHostMLDSA("ML-DSA-65");
-        File[] clientFiles = 
TesterKeystoreGenerator.generatePQCCertificate("testuser", "ML-DSA-65",
-                null, null);
+        configureHostMLDSA("ML-DSA-65");
+        File[] clientFiles = getTestUserMLDSA65Files();
         SSLHostConfig sslHostConfig = 
getTomcatInstance().getConnector().findSslHostConfigs()[0];
         sslHostConfig.setCertificateVerification("required");
-        sslHostConfig.setCaCertificateFile(clientFiles[0].getAbsolutePath());
-        doTestWithOpenSSLClient(serverFiles[0].getAbsolutePath(), null,
+        
sslHostConfig.setCaCertificateFile(getCaCertificateFile().getAbsolutePath());
+        doTestWithOpenSSLClient(getCaCertificateFile().getAbsolutePath(), null,
                 clientFiles[0].getAbsolutePath(), 
clientFiles[1].getAbsolutePath());
     }
 
@@ -230,20 +228,43 @@ public class TestPQC extends TomcatBaseTest {
         }
     }
 
-    private File[] configureHostMLDSA(String algorithm) throws Exception {
-        File[] pqcFiles = 
TesterKeystoreGenerator.generatePQCCertificate("localhost", algorithm,
-                new String[] { "localhost" }, null);
+    private File getCaCertificateFile() {
+        return new File(TesterSupport.CA_CERT_PEM);
+    }
+
+    private File[] getTestUserMLDSA65Files() {
+        return new File[] { new File(TesterSupport.TESTUSER_MLDSA_65_CERT_PEM),
+                new File(TesterSupport.TESTUSER_MLDSA_65_KEY_PEM) };
+    }
+
+    private void configureHostMLDSA(String algorithm) {
+        String certFile;
+        String keyFile;
+        switch (algorithm) {
+            case "ML-DSA-44":
+                certFile = TesterSupport.LOCALHOST_MLDSA_44_CERT_PEM;
+                keyFile = TesterSupport.LOCALHOST_MLDSA_44_KEY_PEM;
+                break;
+            case "ML-DSA-65":
+                certFile = TesterSupport.LOCALHOST_MLDSA_65_CERT_PEM;
+                keyFile = TesterSupport.LOCALHOST_MLDSA_65_KEY_PEM;
+                break;
+            case "ML-DSA-87":
+                certFile = TesterSupport.LOCALHOST_MLDSA_87_CERT_PEM;
+                keyFile = TesterSupport.LOCALHOST_MLDSA_87_KEY_PEM;
+                break;
+            default:
+                throw new IllegalArgumentException("Unknown ML-DSA algorithm 
[" + algorithm + "]");
+        }
 
         Tomcat tomcat = getTomcatInstance();
         Connector connector = tomcat.getConnector();
         SSLHostConfig sslHostConfig = connector.findSslHostConfigs()[0];
 
         SSLHostConfigCertificate cert = new 
SSLHostConfigCertificate(sslHostConfig, Type.MLDSA);
-        cert.setCertificateFile(pqcFiles[0].getAbsolutePath());
-        cert.setCertificateKeyFile(pqcFiles[1].getAbsolutePath());
+        cert.setCertificateFile(new File(certFile).getAbsolutePath());
+        cert.setCertificateKeyFile(new File(keyFile).getAbsolutePath());
         sslHostConfig.addCertificate(cert);
-
-        return pqcFiles;
     }
 
     private void configureHostRSA() {
diff --git a/test/org/apache/tomcat/util/net/TesterKeystoreGenerator.java 
b/test/org/apache/tomcat/util/net/TesterKeystoreGenerator.java
deleted file mode 100644
index 00f1772fcc..0000000000
--- a/test/org/apache/tomcat/util/net/TesterKeystoreGenerator.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tomcat.util.net;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.math.BigInteger;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.KeyStore;
-import java.security.cert.X509Certificate;
-import java.util.Date;
-
-import org.bouncycastle.asn1.x500.X500Name;
-import org.bouncycastle.asn1.x509.Extension;
-import org.bouncycastle.asn1.x509.GeneralName;
-import org.bouncycastle.asn1.x509.GeneralNames;
-import org.bouncycastle.cert.X509v3CertificateBuilder;
-import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
-import org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder;
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
-import org.bouncycastle.openssl.jcajce.JcaPEMWriter;
-import org.bouncycastle.operator.ContentSigner;
-import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
-
-public final class TesterKeystoreGenerator {
-
-    private TesterKeystoreGenerator() {}
-
-    @FunctionalInterface
-    public interface CertificateExtensionsCustomizer {
-        void customize(KeyPair keyPair, X509v3CertificateBuilder certBuilder)
-            throws Exception;
-    }
-
-    /**
-     * Generate a temporary JKS keystore containing a self-signed RSA 
certificate.
-     *
-     * @param cn       the Common Name for the certificate subject
-     * @param alias    the keystore alias for the key entry
-     * @param sanNames DNS Subject Alternative Names to include, or {@code 
null} for none
-     * @param customizer callback to add extensions to the certificate, or 
{@code null} for none.
-     *
-     *  @return a temporary keystore file with password {@link  
TesterSupport#JKS_PASS}
-     *
-     *  @throws Exception if certificate generation or keystore creation fails
-     */
-    public static File generateKeystore(String cn, String alias, String[] 
sanNames,
-                                        CertificateExtensionsCustomizer 
customizer) throws Exception {
-        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
-        kpg.initialize(4096);
-        KeyPair keyPair = kpg.generateKeyPair();
-
-        X500Name subject = new X500Name("CN=" + cn);
-        BigInteger serial = BigInteger.valueOf(System.currentTimeMillis());
-        long oneDay = 86400000L;
-        Date notBefore = new Date(System.currentTimeMillis() - oneDay);
-        Date notAfter = new Date(System.currentTimeMillis() + 365L * oneDay);
-
-        X509v3CertificateBuilder certBuilder = new 
JcaX509v3CertificateBuilder(subject, serial, notBefore, notAfter,
-                subject, keyPair.getPublic());
-
-        if (sanNames != null && sanNames.length > 0) {
-            GeneralName[] generalNames = new GeneralName[sanNames.length];
-            for (int i = 0; i < sanNames.length; i++) {
-                generalNames[i] = new GeneralName(GeneralName.dNSName, 
sanNames[i]);
-            }
-            certBuilder.addExtension(Extension.subjectAlternativeName, false, 
new GeneralNames(generalNames));
-        }
-
-        if (customizer != null) {
-            customizer.customize(keyPair, certBuilder);
-        }
-
-        ContentSigner signer = new 
JcaContentSignerBuilder("SHA256withRSA").build(keyPair.getPrivate());
-        X509Certificate certificate = new 
JcaX509CertificateConverter().getCertificate(certBuilder.build(signer));
-
-        KeyStore ks = KeyStore.getInstance("JKS");
-        ks.load(null, null);
-        ks.setKeyEntry(alias, keyPair.getPrivate(), 
TesterSupport.JKS_PASS.toCharArray(), new X509Certificate[] { certificate });
-
-        File keystoreFile = File.createTempFile("test-cert-", ".jks");
-        keystoreFile.deleteOnExit();
-        try (FileOutputStream fos = new FileOutputStream(keystoreFile)) {
-            ks.store(fos, TesterSupport.JKS_PASS.toCharArray());
-        }
-
-        return keystoreFile;
-    }
-
-    /**
-     * Generate temporary PEM files containing a self-signed PQC certificate 
and private key.
-     *
-     * @param cn        the Common Name for the certificate subject
-     * @param algorithm the PQC algorithm name, e.g. {@code "ML-DSA-44"}, 
{@code "ML-DSA-65"},
-     *                  or {@code "ML-DSA-87"}
-     * @param sanNames  DNS Subject Alternative Names to include, or {@code 
null} for none
-     * @param customizer callback to add extensions to the certificate, or 
{@code null} for none
-     *
-     * @return a two-element array: {@code [0]} is the certificate PEM file, 
{@code [1]} is the
-     *         private key PEM file
-     *
-     * @throws Exception if certificate generation fails
-     */
-    public static File[] generatePQCCertificate(String cn, String algorithm, 
String[] sanNames,
-                                                
CertificateExtensionsCustomizer customizer) throws Exception {
-        BouncyCastleProvider bouncyCastleProvider = new BouncyCastleProvider();
-
-        KeyPairGenerator keyPairGenerator = 
KeyPairGenerator.getInstance(algorithm, bouncyCastleProvider);
-        KeyPair keyPair = keyPairGenerator.generateKeyPair();
-
-        X500Name subject = new X500Name("CN=" + cn);
-        BigInteger serial = BigInteger.valueOf(System.currentTimeMillis());
-        long oneDay = 86400000L;
-        Date notBefore = new Date(System.currentTimeMillis() - oneDay);
-        Date notAfter = new Date(System.currentTimeMillis() + 365L * oneDay);
-
-        X509v3CertificateBuilder certBuilder = new 
JcaX509v3CertificateBuilder(subject, serial, notBefore,
-                notAfter, subject, keyPair.getPublic());
-
-        if (sanNames != null && sanNames.length > 0) {
-            GeneralName[] generalNames = new GeneralName[sanNames.length];
-            for (int i = 0; i < sanNames.length; i++) {
-                generalNames[i] = new GeneralName(GeneralName.dNSName, 
sanNames[i]);
-            }
-            certBuilder.addExtension(Extension.subjectAlternativeName, false, 
new GeneralNames(generalNames));
-        }
-
-        if (customizer != null) {
-            customizer.customize(keyPair, certBuilder);
-        }
-
-        ContentSigner signer = new 
JcaContentSignerBuilder(algorithm).setProvider(bouncyCastleProvider)
-                .build(keyPair.getPrivate());
-        X509Certificate certificate = new 
JcaX509CertificateConverter().setProvider(bouncyCastleProvider)
-                .getCertificate(certBuilder.build(signer));
-
-        File certFile = File.createTempFile("test-pqc-cert-", ".pem");
-        certFile.deleteOnExit();
-        try (JcaPEMWriter writer = new JcaPEMWriter(new FileWriter(certFile))) 
{
-            writer.writeObject(certificate);
-        }
-
-        File keyFile = File.createTempFile("test-pqc-key-", ".pem");
-        keyFile.deleteOnExit();
-        try (JcaPEMWriter writer = new JcaPEMWriter(new FileWriter(keyFile))) {
-            writer.writeObject(keyPair.getPrivate());
-        }
-
-        return new File[] { certFile, keyFile };
-    }
-}
diff --git a/test/org/apache/tomcat/util/net/TesterSupport.java 
b/test/org/apache/tomcat/util/net/TesterSupport.java
index 81724bf262..02e5b69a85 100644
--- a/test/org/apache/tomcat/util/net/TesterSupport.java
+++ b/test/org/apache/tomcat/util/net/TesterSupport.java
@@ -102,6 +102,16 @@ public final class TesterSupport {
     public static final String LOCALHOST_RSA_LONGCHAIN_CERT_PEM = SSL_DIR + 
"localhost-rsa-longchain-cert.pem";
     public static final String LOCALHOST_RSA_LONGCHAIN_KEY_PEM = SSL_DIR + 
"localhost-rsa-longchain-key.pem";
     public static final String LOCALHOST_RSA_LONGCHAIN_CHAIN_PEM = SSL_DIR + 
"localhost-rsa-longchain-chain.pem";
+    public static final String LOCALHOST_RSA_DNSONLY_JKS = SSL_DIR + 
"localhost-rsa-dnsonly.jks";
+    public static final String LOCALHOST_RSA_LARGECERT_JKS = SSL_DIR + 
"localhost-rsa-largecert.jks";
+    public static final String LOCALHOST_MLDSA_44_CERT_PEM = SSL_DIR + 
"localhost-mldsa-44-cert.pem";
+    public static final String LOCALHOST_MLDSA_44_KEY_PEM = SSL_DIR + 
"localhost-mldsa-44-key.pem";
+    public static final String LOCALHOST_MLDSA_65_CERT_PEM = SSL_DIR + 
"localhost-mldsa-65-cert.pem";
+    public static final String LOCALHOST_MLDSA_65_KEY_PEM = SSL_DIR + 
"localhost-mldsa-65-key.pem";
+    public static final String LOCALHOST_MLDSA_87_CERT_PEM = SSL_DIR + 
"localhost-mldsa-87-cert.pem";
+    public static final String LOCALHOST_MLDSA_87_KEY_PEM = SSL_DIR + 
"localhost-mldsa-87-key.pem";
+    public static final String TESTUSER_MLDSA_65_CERT_PEM = SSL_DIR + 
"testuser-mldsa-65-cert.pem";
+    public static final String TESTUSER_MLDSA_65_KEY_PEM = SSL_DIR + 
"testuser-mldsa-65-key.pem";
     public static final String DB_INDEX = SSL_DIR + "index.db";
     public static final String OCSP_RESPONDER_RSA_CERT = SSL_DIR + 
"ocsp-responder-rsa-cert.pem";
     public static final String OCSP_RESPONDER_RSA_KEY = SSL_DIR + 
"ocsp-responder-rsa-key.pem";
diff --git a/test/org/apache/tomcat/util/net/keystore-info.txt 
b/test/org/apache/tomcat/util/net/keystore-info.txt
index 986a4bfa94..462d1f973b 100644
--- a/test/org/apache/tomcat/util/net/keystore-info.txt
+++ b/test/org/apache/tomcat/util/net/keystore-info.txt
@@ -24,5 +24,11 @@ localhost-rsa.jks (changeit)
 localhost-rsa-copy1.jks (changeit)
   tomcat    CN=localhost (tomcatpass)
 
+localhost-rsa-dnsonly.jks (changeit)
+  tomcat    CN=localhost (SAN: DNS:localhost only)
+
+localhost-rsa-largecert.jks (changeit)
+  tomcat    CN=localhost (large custom extension OID 2.999)
+
 user1.jks (changeit)
   user1     CN=user1
diff --git a/test/org/apache/tomcat/util/net/localhost-mldsa-44-cert.pem 
b/test/org/apache/tomcat/util/net/localhost-mldsa-44-cert.pem
new file mode 100644
index 0000000000..00ed882be3
--- /dev/null
+++ b/test/org/apache/tomcat/util/net/localhost-mldsa-44-cert.pem
@@ -0,0 +1,193 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 4108 (0x100c)
+        Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=DE, L=Wilmington, O=The Apache Software Foundation, 
OU=Apache Tomcat PMC, CN=Apache Tomcat Test CA
+        Validity
+            Not Before: Nov 12 15:24:01 2026 GMT
+            Not After : Nov 11 15:24:01 2028 GMT
+        Subject: C=US, ST=DE, L=Wilmington, O=The Apache Software Foundation, 
OU=Apache Tomcat PMC, CN=localhost
+        Subject Public Key Info:
+            Public Key Algorithm: ML-DSA-44
+                ML-DSA-44 Public-Key:
+                pub:
+                    09:ed:ab:7a:e6:8d:0e:3c:0a:aa:e3:0e:67:a3:cb:
+                    4a:e7:bc:08:7b:eb:c2:29:41:e0:d8:83:10:67:ff:
+                    6b:aa:7f:d1:35:42:d0:95:70:cf:a3:54:b9:b2:7e:
+                    2f:76:3c:c6:2f:d5:44:75:a8:a1:ab:10:72:4c:d3:
+                    57:84:68:55:c7:9f:21:e3:d7:64:86:09:4b:92:4f:
+                    71:c8:f9:50:bc:cc:d4:3d:71:5c:df:67:50:45:9a:
+                    1e:ed:9e:43:ac:33:5f:dc:21:52:1c:ec:05:a0:76:
+                    04:5a:9b:4f:b4:f2:b4:1f:f9:41:58:8a:47:cb:50:
+                    f3:76:b3:d9:43:11:c1:0d:89:78:c0:7d:53:d1:fa:
+                    2b:26:5d:6c:fc:a3:49:09:17:3e:56:41:e2:e3:2e:
+                    98:9f:75:74:e9:69:a5:d9:4a:32:7d:39:26:d6:f3:
+                    c9:51:f5:ce:be:61:dc:0f:0d:9b:02:59:4b:a8:6b:
+                    4d:0b:1e:89:40:05:7a:cb:b1:73:a2:0f:c6:df:6d:
+                    60:8a:ae:17:7d:ff:a2:31:00:79:d1:da:26:b2:c5:
+                    e5:1e:95:6e:2a:7d:fd:92:30:e4:86:0a:3b:45:3d:
+                    c1:7c:6b:94:ae:01:72:1b:a3:7b:d1:c6:55:4f:5d:
+                    8e:09:06:0d:26:6b:30:fa:4f:66:c7:98:ce:10:1b:
+                    ab:89:44:6c:d4:8b:83:07:54:25:a4:66:d3:50:44:
+                    a2:3a:3e:86:f5:71:63:06:3e:8b:ff:d9:a9:38:a4:
+                    13:98:2d:61:08:0a:29:d9:56:02:fa:43:6d:72:52:
+                    7a:32:49:c8:fe:ac:1a:50:11:a2:5a:11:62:45:89:
+                    90:1e:18:5d:97:9d:3d:68:c4:2b:95:fd:2a:14:a7:
+                    1e:5f:65:d8:b9:aa:7c:ea:c7:c4:d7:a4:a6:48:fd:
+                    cd:a8:f4:23:30:7c:0e:0b:c5:16:8d:ba:8a:1e:8c:
+                    61:05:be:8f:58:a0:8f:64:55:ac:a6:d6:56:fb:a5:
+                    6c:d4:46:73:a0:06:8c:8a:fb:e8:84:d9:2e:e3:76:
+                    07:2a:6b:76:55:20:5a:22:d4:c7:43:92:81:d7:1d:
+                    00:95:03:86:61:01:72:2f:b9:9e:34:9f:c4:3e:5d:
+                    1e:41:1a:92:61:9a:50:b4:1f:25:c0:bf:be:2f:2f:
+                    36:74:ac:44:35:d2:b6:54:b7:fb:7b:11:9d:40:2e:
+                    99:29:8c:5f:c7:27:5f:2c:46:f7:46:e4:89:2c:0c:
+                    bb:52:5f:be:ec:a8:0b:d7:c8:60:70:5a:c5:1f:35:
+                    4c:b6:c8:a1:a8:08:93:db:8f:01:eb:cd:b8:6f:63:
+                    bd:c2:3c:45:7c:04:96:49:7a:63:6f:ad:62:09:8b:
+                    75:e5:11:c9:fc:7a:e0:39:5e:81:22:1e:06:0d:96:
+                    a4:a4:17:f8:81:34:47:13:84:00:74:06:e8:01:74:
+                    c6:a9:eb:a8:95:5c:bf:37:e4:20:14:ba:ea:e1:6f:
+                    99:e2:2c:f0:5e:0a:50:d0:85:cf:93:a7:bc:92:40:
+                    21:0a:b3:ce:bf:f7:e5:ca:6a:a8:cd:c6:73:0a:6e:
+                    d6:e3:41:6a:81:8f:e3:d7:6e:6a:d0:fb:3f:9b:08:
+                    71:5c:1b:70:bc:6b:44:e5:44:25:f0:2f:af:94:2c:
+                    68:2c:82:9a:6b:a4:92:70:9a:9f:ff:a8:8a:dc:6d:
+                    48:ff:c6:d4:0b:d4:cf:0e:c3:27:cf:5e:e4:fd:3c:
+                    79:8c:59:54:fe:90:30:a2:52:b3:13:16:10:f5:73:
+                    24:cc:2d:61:eb:a5:3e:6b:4e:1c:42:ce:c6:2b:eb:
+                    2c:0b:09:20:ec:3f:6b:d5:7a:86:4b:9c:dd:4d:13:
+                    8f:62:1a:ec:22:3f:71:4e:c8:2d:93:f1:5a:99:50:
+                    c8:36:24:13:d7:93:cc:2c:20:b7:b5:8f:e6:6e:d0:
+                    fc:f5:9e:e0:20:dc:5b:b5:07:8b:13:1e:84:54:4d:
+                    b8:08:65:ff:d6:d1:21:03:df:06:13:be:98:16:ff:
+                    9b:23:a9:69:a2:9c:90:a7:48:96:0d:a0:ac:1f:c6:
+                    dc:68:90:9d:7d:dd:18:6a:d1:93:47:7a:6c:9f:ce:
+                    ad:1d:6e:e7:7d:2d:46:15:99:06:98:7d:84:5d:ca:
+                    be:04:73:46:69:ca:05:76:44:2c:2b:04:1f:f1:c2:
+                    66:1a:18:bc:50:d5:45:39:6b:2f:69:15:13:c1:4c:
+                    2f:9f:26:dc:35:f9:da:1e:2b:35:ea:51:d5:56:74:
+                    dc:54:71:11:4f:70:02:f8:ed:6e:f9:54:7f:5e:d6:
+                    4d:f9:0e:44:0e:03:d5:3a:ec:5a:4e:c7:5d:f0:f9:
+                    44:78:34:46:6e:d6:9f:c3:a6:3f:b4:2c:84:92:82:
+                    a3:ac:a0:d6:10:a5:4d:6b:65:e4:34:b2:ff:a5:30:
+                    91:de:4c:64:fd:94:9c:7a:c7:6f:68:30:87:ec:8f:
+                    e2:7f:0b:84:11:f5:21:37:f4:59:a2:06:ee:01:35:
+                    40:d7:36:9c:ff:65:7b:5a:12:c4:0d:ef:b3:e0:5e:
+                    0f:85:68:3d:69:f7:16:ed:04:53:eb:9e:21:aa:a9:
+                    f1:4b:99:62:0c:4d:a4:63:1f:03:33:c8:16:33:34:
+                    9e:84:41:9f:9c:02:90:30:c2:f7:9a:be:55:5e:fe:
+                    20:ce:9b:5f:3d:39:36:3a:43:e5:2b:6b:5f:47:f2:
+                    58:3b:b8:d7:f0:17:66:c7:4d:1f:ea:ec:0b:c1:1c:
+                    c7:8b:81:64:f3:30:02:bd:45:06:9a:bd:f9:61:97:
+                    9c:1a:c2:a8:3e:9c:44:a8:80:c9:5d:e4:64:6f:62:
+                    74:ee:12:46:78:c4:25:c9:b9:22:a6:d9:6e:fa:92:
+                    7e:31:40:af:62:92:9c:c9:91:da:a4:c8:94:f6:ca:
+                    e5:02:fa:63:61:33:83:0b:b9:30:ac:1c:be:11:7f:
+                    c8:3d:82:0e:2e:af:4c:81:93:3d:a0:53:f4:8d:d5:
+                    34:54:73:26:13:f1:18:3c:3a:37:a6:c7:73:09:e8:
+                    60:9b:b4:1b:7b:58:66:40:71:80:5c:38:3e:e2:f3:
+                    b3:51:ce:6b:9e:3c:f3:e9:c9:c6:9b:ee:3a:cd:6a:
+                    2e:6d:52:2a:d5:5e:3c:09:1c:89:0f:36:cb:86:ce:
+                    85:dc:38:33:95:29:7e:30:8a:65:8e:8e:d3:e1:06:
+                    fb:92:7e:10:03:69:df:18:84:f6:2a:84:1f:0f:bf:
+                    87:09:ba:09:67:d7:e4:ef:58:a8:3b:d7:70:96:d8:
+                    48:5d:ba:c8:6a:92:44:e7:cb:fe:6d:d5:c6:2b:6e:
+                    42:ed:46:92:92:6c:54:7d:4a:d7:b2:19:ae:7a:6c:
+                    69:43:4d:a6:92:d6:45:8c:b5:1c:68:70:fa:52:76:
+                    43:69:4c:98:16:4c:fd:46:93:1c:af:8d:5f:b2:f1:
+                    ad:3e:c6:eb:e4:51:05:05:fa:4e:ed:8a:b8:74:38:
+                    f5:71:88:54:27:94:4c:7e:02:b6:12:8a:95:66:89:
+                    24:1e:09:35:3f:ca:03
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                CA:CA:6F:D7:C4:DD:C8:C3:6C:59:E5:02:D7:CF:7C:41:49:1B:EE:2D
+            X509v3 Authority Key Identifier: 
+                3D:32:CA:37:D2:10:F9:50:86:56:0C:A3:71:F0:63:75:25:7C:AD:65
+            X509v3 Subject Alternative Name: 
+                DNS:localhost
+    Signature Algorithm: sha256WithRSAEncryption
+    Signature Value:
+        44:84:1d:c3:7b:8c:45:8e:5f:70:41:be:bd:61:a3:11:6b:62:
+        5a:11:e3:35:42:01:d2:4a:28:20:b7:4a:5c:04:30:97:21:a0:
+        88:bb:77:ae:ee:b4:fa:b7:9c:c5:a6:e8:2e:70:7c:4b:16:a8:
+        86:f8:50:fd:2a:0a:26:c4:25:0a:6e:c0:87:c9:ba:09:18:4b:
+        32:ed:d9:b4:19:6a:90:77:68:78:be:a0:bc:86:f5:27:19:d7:
+        98:69:f6:ee:ad:d5:d0:75:e2:72:9e:86:7d:a3:db:43:e9:b9:
+        7d:e7:8a:58:0f:10:86:aa:fe:aa:9b:50:3b:fc:3e:2f:cc:9c:
+        a3:76:4d:5f:ac:c8:09:1e:a3:a3:78:cf:a8:3b:60:9b:73:79:
+        af:45:98:08:09:d2:2a:13:2a:1b:5b:d9:fc:97:ca:e8:f1:b0:
+        51:f9:9f:2c:8c:86:7b:69:d8:20:a1:71:de:d2:ac:fa:be:6d:
+        49:3f:22:5f:de:f0:2f:7f:b2:6c:7e:d2:79:bf:62:85:ab:8e:
+        de:e8:98:7b:82:16:93:6f:bb:a6:83:31:03:90:a5:bf:9b:33:
+        50:56:09:36:38:0a:72:83:cd:5a:ad:d9:ff:98:77:51:c5:67:
+        35:21:33:96:f4:c3:f4:ea:3a:10:3f:44:51:b7:c4:a6:2a:c0:
+        8b:69:22:00:37:27:1f:db:b0:18:cd:68:f1:25:f2:1d:dd:8b:
+        c6:96:49:84:4b:0b:88:61:1c:4b:50:c2:39:ad:98:d3:95:1a:
+        30:a6:85:1e:ea:c4:36:2d:dc:a7:52:1b:b1:76:f5:ba:46:55:
+        18:d3:59:b4:1f:74:60:cc:f7:70:a7:13:f7:d3:48:68:d7:af:
+        7c:75:ba:a7:69:a4:ab:77:23:51:94:cf:0e:10:75:0e:59:3a:
+        c8:a6:b0:54:6a:49:8c:ea:50:39:48:86:93:b1:58:f2:87:0c:
+        4b:f0:fb:a5:29:e8:45:c9:c6:8e:cb:0f:96:f6:aa:8e:a3:47:
+        f9:2a:d3:87:0a:25:68:fe:3c:4c:cc:63:4a:e4:c3:2c:e4:9f:
+        9b:28:3e:08:b1:a6:0f:24:dc:fa:a5:e8:a3:b3:f6:87:7c:12:
+        ee:9a:38:6a:3a:4b:df:66:2b:3f:aa:a7:95:ef:4c:9a:63:0d:
+        c9:15:0c:d8:00:da:b0:fe:9f:a2:2d:08:cb:35:f2:c6:e7:83:
+        12:38:82:4c:97:20:23:32:91:4f:b7:41:9c:42:05:b5:79:6e:
+        5f:fb:67:0f:c7:af:d2:c5:cf:cf:60:da:f2:ee:70:67:0a:da:
+        e5:14:6d:03:30:bc:8b:a1:80:2e:84:b7:1b:3e:34:f8:ed:dd:
+        fc:5c:bd:ae:3e:43:c3:62
+-----BEGIN CERTIFICATE-----
+MIIJDTCCBvWgAwIBAgICEAwwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT
+MQswCQYDVQQIEwJERTETMBEGA1UEBxMKV2lsbWluZ3RvbjEnMCUGA1UEChMeVGhl
+IEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uMRowGAYDVQQLExFBcGFjaGUgVG9t
+Y2F0IFBNQzEeMBwGA1UEAxMVQXBhY2hlIFRvbWNhdCBUZXN0IENBMB4XDTI2MTEx
+MjE1MjQwMVoXDTI4MTExMTE1MjQwMVowgYgxCzAJBgNVBAYTAlVTMQswCQYDVQQI
+DAJERTETMBEGA1UEBwwKV2lsbWluZ3RvbjEnMCUGA1UECgweVGhlIEFwYWNoZSBT
+b2Z0d2FyZSBGb3VuZGF0aW9uMRowGAYDVQQLDBFBcGFjaGUgVG9tY2F0IFBNQzES
+MBAGA1UEAwwJbG9jYWxob3N0MIIFMjALBglghkgBZQMEAxEDggUhAAntq3rmjQ48
+CqrjDmejy0rnvAh768IpQeDYgxBn/2uqf9E1QtCVcM+jVLmyfi92PMYv1UR1qKGr
+EHJM01eEaFXHnyHj12SGCUuST3HI+VC8zNQ9cVzfZ1BFmh7tnkOsM1/cIVIc7AWg
+dgRam0+08rQf+UFYikfLUPN2s9lDEcENiXjAfVPR+ismXWz8o0kJFz5WQeLjLpif
+dXTpaaXZSjJ9OSbW88lR9c6+YdwPDZsCWUuoa00LHolABXrLsXOiD8bfbWCKrhd9
+/6IxAHnR2iayxeUelW4qff2SMOSGCjtFPcF8a5SuAXIbo3vRxlVPXY4JBg0mazD6
+T2bHmM4QG6uJRGzUi4MHVCWkZtNQRKI6Pob1cWMGPov/2ak4pBOYLWEICinZVgL6
+Q21yUnoyScj+rBpQEaJaEWJFiZAeGF2XnT1oxCuV/SoUpx5fZdi5qnzqx8TXpKZI
+/c2o9CMwfA4LxRaNuooejGEFvo9YoI9kVaym1lb7pWzURnOgBoyK++iE2S7jdgcq
+a3ZVIFoi1MdDkoHXHQCVA4ZhAXIvuZ40n8Q+XR5BGpJhmlC0HyXAv74vLzZ0rEQ1
+0rZUt/t7EZ1ALpkpjF/HJ18sRvdG5IksDLtSX77sqAvXyGBwWsUfNUy2yKGoCJPb
+jwHrzbhvY73CPEV8BJZJemNvrWIJi3XlEcn8euA5XoEiHgYNlqSkF/iBNEcThAB0
+BugBdMap66iVXL835CAUuurhb5niLPBeClDQhc+Tp7ySQCEKs86/9+XKaqjNxnMK
+btbjQWqBj+PXbmrQ+z+bCHFcG3C8a0TlRCXwL6+ULGgsgpprpJJwmp//qIrcbUj/
+xtQL1M8OwyfPXuT9PHmMWVT+kDCiUrMTFhD1cyTMLWHrpT5rThxCzsYr6ywLCSDs
+P2vVeoZLnN1NE49iGuwiP3FOyC2T8VqZUMg2JBPXk8wsILe1j+Zu0Pz1nuAg3Fu1
+B4sTHoRUTbgIZf/W0SED3wYTvpgW/5sjqWminJCnSJYNoKwfxtxokJ193Rhq0ZNH
+emyfzq0dbud9LUYVmQaYfYRdyr4Ec0ZpygV2RCwrBB/xwmYaGLxQ1UU5ay9pFRPB
+TC+fJtw1+doeKzXqUdVWdNxUcRFPcAL47W75VH9e1k35DkQOA9U67FpOx13w+UR4
+NEZu1p/Dpj+0LISSgqOsoNYQpU1rZeQ0sv+lMJHeTGT9lJx6x29oMIfsj+J/C4QR
+9SE39FmiBu4BNUDXNpz/ZXtaEsQN77PgXg+FaD1p9xbtBFPrniGqqfFLmWIMTaRj
+HwMzyBYzNJ6EQZ+cApAwwveavlVe/iDOm189OTY6Q+Ura19H8lg7uNfwF2bHTR/q
+7AvBHMeLgWTzMAK9RQaavflhl5wawqg+nESogMld5GRvYnTuEkZ4xCXJuSKm2W76
+kn4xQK9ikpzJkdqkyJT2yuUC+mNhM4MLuTCsHL4Rf8g9gg4ur0yBkz2gU/SN1TRU
+cyYT8Rg8Ojemx3MJ6GCbtBt7WGZAcYBcOD7i87NRzmuePPPpycab7jrNai5tUirV
+XjwJHIkPNsuGzoXcODOVKX4wimWOjtPhBvuSfhADad8YhPYqhB8Pv4cJugln1+Tv
+WKg713CW2EhdushqkkTny/5t1cYrbkLtRpKSbFR9SteyGa56bGlDTaaS1kWMtRxo
+cPpSdkNpTJgWTP1GkxyvjV+y8a0+xuvkUQUF+k7tirh0OPVxiFQnlEx+ArYSipVm
+iSQeCTU/ygOjYzBhMAkGA1UdEwQCMAAwHQYDVR0OBBYEFMrKb9fE3cjDbFnlAtfP
+fEFJG+4tMB8GA1UdIwQYMBaAFD0yyjfSEPlQhlYMo3HwY3UlfK1lMBQGA1UdEQQN
+MAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAgEARIQdw3uMRY5fcEG+vWGj
+EWtiWhHjNUIB0kooILdKXAQwlyGgiLt3ru60+recxaboLnB8SxaohvhQ/SoKJsQl
+Cm7Ah8m6CRhLMu3ZtBlqkHdoeL6gvIb1JxnXmGn27q3V0HXicp6GfaPbQ+m5feeK
+WA8Qhqr+qptQO/w+L8yco3ZNX6zICR6jo3jPqDtgm3N5r0WYCAnSKhMqG1vZ/JfK
+6PGwUfmfLIyGe2nYIKFx3tKs+r5tST8iX97wL3+ybH7Seb9ihauO3uiYe4IWk2+7
+poMxA5Clv5szUFYJNjgKcoPNWq3Z/5h3UcVnNSEzlvTD9Oo6ED9EUbfEpirAi2ki
+ADcnH9uwGM1o8SXyHd2LxpZJhEsLiGEcS1DCOa2Y05UaMKaFHurENi3cp1IbsXb1
+ukZVGNNZtB90YMz3cKcT99NIaNevfHW6p2mkq3cjUZTPDhB1Dlk6yKawVGpJjOpQ
+OUiGk7FY8ocMS/D7pSnoRcnGjssPlvaqjqNH+SrThwolaP48TMxjSuTDLOSfmyg+
+CLGmDyTc+qXoo7P2h3wS7po4ajpL32YrP6qnle9MmmMNyRUM2ADasP6foi0IyzXy
+xueDEjiCTJcgIzKRT7dBnEIFtXluX/tnD8ev0sXPz2Da8u5wZwra5RRtAzC8i6GA
+LoS3Gz40+O3d/Fy9rj5Dw2I=
+-----END CERTIFICATE-----
diff --git a/test/org/apache/tomcat/util/net/localhost-mldsa-44-key.pem 
b/test/org/apache/tomcat/util/net/localhost-mldsa-44-key.pem
new file mode 100644
index 0000000000..352b503299
--- /dev/null
+++ b/test/org/apache/tomcat/util/net/localhost-mldsa-44-key.pem
@@ -0,0 +1,57 @@
+-----BEGIN PRIVATE KEY-----
+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
+-----END PRIVATE KEY-----
diff --git a/test/org/apache/tomcat/util/net/localhost-mldsa-65-cert.pem 
b/test/org/apache/tomcat/util/net/localhost-mldsa-65-cert.pem
new file mode 100644
index 0000000000..67447b2fa2
--- /dev/null
+++ b/test/org/apache/tomcat/util/net/localhost-mldsa-65-cert.pem
@@ -0,0 +1,249 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 4109 (0x100d)
+        Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=DE, L=Wilmington, O=The Apache Software Foundation, 
OU=Apache Tomcat PMC, CN=Apache Tomcat Test CA
+        Validity
+            Not Before: Nov 12 15:24:01 2026 GMT
+            Not After : Nov 11 15:24:01 2028 GMT
+        Subject: C=US, ST=DE, L=Wilmington, O=The Apache Software Foundation, 
OU=Apache Tomcat PMC, CN=localhost
+        Subject Public Key Info:
+            Public Key Algorithm: ML-DSA-65
+                ML-DSA-65 Public-Key:
+                pub:
+                    19:31:66:99:cc:2d:89:14:79:e4:17:ca:82:23:63:
+                    a7:d3:c0:a8:57:fc:9c:a7:a5:77:03:55:8d:35:d7:
+                    ca:25:43:52:99:a7:90:04:21:fd:a8:73:6a:af:63:
+                    de:87:2a:ce:f6:c0:05:49:d5:d0:df:7a:8f:30:bf:
+                    cb:83:32:f1:4b:2b:46:6d:d9:a5:52:9e:7d:98:56:
+                    fb:1c:2b:41:90:d1:be:86:c8:2e:90:4a:05:ac:b0:
+                    67:3d:4f:41:d2:e9:cb:f1:ac:24:0e:5a:fb:1d:86:
+                    ea:fa:71:89:58:2b:1f:0d:f7:27:5f:d7:b7:61:0a:
+                    fd:88:54:87:1a:65:b8:45:bb:b8:e3:36:9d:33:62:
+                    fb:f8:7c:d1:37:99:35:df:9f:2b:0a:0d:52:5f:7d:
+                    42:83:3b:d5:b0:b1:e7:ea:fb:8e:c6:75:d8:7e:ee:
+                    5f:7d:7d:60:38:e1:7c:ed:62:11:02:91:e1:0d:5b:
+                    8b:88:96:5b:01:01:32:29:e1:f4:c6:01:70:7e:75:
+                    0c:bc:ee:8f:21:94:d6:0e:39:ff:78:9c:b4:89:f3:
+                    42:75:82:27:99:29:ae:28:1d:0f:d4:28:e8:fe:b1:
+                    0b:76:2f:e4:6b:be:b6:f6:e5:50:5e:2d:34:7c:e4:
+                    aa:d3:de:07:dc:c7:09:be:ad:b8:a7:00:2e:79:24:
+                    32:71:93:58:5c:00:75:fb:5c:13:eb:d4:6f:e6:db:
+                    27:6e:88:66:25:c1:ba:d6:ee:e2:8f:2d:e3:d0:93:
+                    8a:34:25:81:a9:85:d3:54:64:f8:b8:84:97:64:11:
+                    d0:ac:d2:88:1f:9f:2e:22:83:9f:40:30:88:00:f3:
+                    f6:bd:5f:36:c5:11:d9:9d:05:44:3c:b7:58:bb:54:
+                    08:3c:43:d0:aa:c3:79:92:9b:0f:46:2a:9f:1e:6f:
+                    b7:71:5e:cf:0a:32:2b:ea:db:ea:a2:2e:73:a4:68:
+                    15:74:39:53:c1:30:8e:20:8d:51:a0:34:48:4e:24:
+                    10:cd:37:46:57:5c:a1:93:f1:8b:d8:21:98:dc:d9:
+                    03:ed:63:de:bb:31:1a:c4:5e:a9:c8:7f:6f:3d:7c:
+                    a7:43:f0:4c:15:8b:90:b5:4c:f5:7b:b1:20:5d:35:
+                    a6:02:ba:c2:38:aa:eb:a2:fa:c7:94:f3:df:e8:c8:
+                    68:28:30:2f:f8:f3:50:b1:f7:b8:05:7b:2c:df:ea:
+                    f1:af:cf:0f:8c:e2:d2:f9:ba:7f:74:8b:1b:00:d8:
+                    09:a0:08:f5:16:f4:37:44:ef:78:89:61:92:77:f8:
+                    ce:5d:86:93:75:0f:92:46:15:9b:e8:b1:26:98:e1:
+                    ef:02:8d:78:01:0d:96:31:58:29:44:6e:eb:44:63:
+                    db:b5:7f:d3:0e:a4:f0:8d:dd:3d:c9:cb:28:69:17:
+                    09:f3:f4:15:05:e4:f6:bd:05:87:81:12:ea:90:15:
+                    7f:49:2b:1e:0f:9c:bf:c8:b0:b8:9c:37:1f:f2:dc:
+                    fc:7c:2f:1b:30:0d:55:81:fd:8c:28:bf:b5:9d:a5:
+                    33:91:a8:b1:9e:19:b7:02:8d:13:08:3b:27:40:ce:
+                    86:0c:a1:05:e7:c1:6c:b8:b1:7a:0a:98:34:8f:2b:
+                    b7:f4:03:ff:21:9a:86:3b:6b:b6:7c:e5:f7:4d:8d:
+                    06:ab:73:af:6a:26:88:62:36:fe:d0:c8:a6:84:99:
+                    a7:f9:6a:db:42:01:6a:f1:ff:ad:16:42:e5:2e:31:
+                    4d:12:71:ef:af:e0:e9:7c:d1:ee:4b:e8:ce:98:62:
+                    f2:3a:c9:dd:4d:26:bd:25:a9:68:3f:e6:99:ba:df:
+                    00:85:d4:c0:fc:3f:b5:ed:33:2c:87:80:6b:1b:f1:
+                    e4:75:8f:40:f4:97:3f:a3:9d:db:9d:80:09:f4:31:
+                    07:e6:ae:6b:c2:12:3b:81:f6:db:76:9d:ef:d2:55:
+                    2a:e9:65:09:0c:50:61:7a:2b:a9:81:fe:2c:35:83:
+                    cb:13:84:e6:02:2d:2e:d4:94:57:bf:ac:42:6c:39:
+                    7d:53:7c:a5:c8:91:7f:33:50:14:eb:76:ac:fa:d8:
+                    ab:37:f2:1e:7e:e2:3e:6e:70:27:01:53:23:8c:d2:
+                    7d:1f:ef:11:3c:1f:ac:e3:07:88:5a:3e:78:84:a1:
+                    b9:30:21:f6:a2:6a:74:1b:3a:b3:8d:22:b9:ac:e7:
+                    36:4f:05:b8:de:b2:c5:2a:e8:76:38:dd:20:b5:de:
+                    74:73:ad:7c:c9:89:84:ca:22:38:f4:33:fd:c7:13:
+                    60:b6:61:59:bd:66:24:18:f0:14:6f:a5:9d:91:35:
+                    5d:41:80:09:93:e1:86:de:18:2f:8e:88:39:68:ad:
+                    9d:63:70:73:41:cb:1e:82:95:ec:a9:48:c0:44:64:
+                    93:97:f4:2a:63:12:b4:a6:10:26:7c:7c:62:a8:a9:
+                    2c:1f:39:b0:e4:4e:52:65:e0:cc:47:c7:05:c5:97:
+                    4e:76:e6:15:db:b6:44:82:5b:52:5f:a1:65:2a:4f:
+                    b0:23:1a:a0:c7:69:6b:dc:03:21:2c:92:8b:ab:1d:
+                    bf:31:09:17:2f:4f:91:1b:76:3a:b3:e0:08:53:27:
+                    69:11:ee:c6:83:d2:95:fb:04:b5:a1:fd:ac:e4:3a:
+                    d3:9b:71:f0:4e:f3:b8:1c:cf:b9:78:4c:4a:7c:43:
+                    22:d4:49:21:94:6c:b5:7b:a0:35:5a:d4:b8:e2:e5:
+                    87:c6:a3:21:e7:90:3d:eb:67:7e:7a:6a:15:d6:bd:
+                    df:43:57:41:25:44:82:84:44:5e:56:50:ca:b2:4b:
+                    27:59:27:f5:26:c5:da:d3:8d:1a:55:78:fa:34:28:
+                    e8:35:7f:ad:b3:43:a9:d5:1a:4e:c1:93:24:9a:aa:
+                    41:d5:cf:3c:33:ed:77:dc:00:95:9b:35:61:fe:37:
+                    63:03:cd:f0:cc:f2:0d:39:4b:b1:7c:0f:c6:4e:44:
+                    fb:48:70:50:48:63:52:12:55:a4:61:d8:79:34:31:
+                    8a:76:e2:4d:7d:12:b4:a5:e8:45:b0:c2:0e:55:48:
+                    c4:bd:0f:2d:7d:a9:93:05:c9:3d:03:7c:65:52:66:
+                    8f:f1:86:4c:af:bb:d7:04:90:d1:5a:99:39:67:85:
+                    ac:e8:15:5d:95:26:ca:e2:36:a3:ec:75:16:34:b9:
+                    67:38:a5:c0:d5:2b:eb:f1:00:4b:38:4a:36:8d:f3:
+                    85:16:b1:df:6f:ec:d1:9f:3b:47:03:d8:ba:d2:7d:
+                    cd:a5:ac:c5:3d:db:a9:db:31:74:c3:c5:2e:d4:b4:
+                    51:fc:38:22:5d:24:64:b0:e5:43:da:2f:34:ad:e8:
+                    fa:4a:92:ee:36:ab:92:b2:84:77:48:16:fd:65:68:
+                    a9:92:42:7c:1c:f4:c0:a5:58:ce:9d:a2:a3:39:9b:
+                    46:ce:d1:77:e8:db:84:f5:7c:7b:2d:5d:98:71:35:
+                    07:60:2c:19:16:8e:92:4f:b7:fb:e2:c9:1c:63:b9:
+                    f2:af:26:28:fe:f7:dc:e1:47:b9:c2:52:bb:c2:56:
+                    81:fe:56:02:c9:e7:30:ce:fd:03:93:27:4c:a6:8d:
+                    5d:e3:ad:8a:91:94:a9:00:a2:92:a9:ee:1a:19:37:
+                    93:af:13:cb:b4:2d:c5:01:ae:1e:5e:fc:5c:39:86:
+                    ef:94:a9:a6:6b:d0:02:ba:93:f7:b4:34:29:59:27:
+                    5a:ae:75:db:27:22:fe:9b:7a:4d:68:4f:75:7a:9a:
+                    77:25:41:f0:da:29:f9:cc:9b:68:df:48:44:d7:d1:
+                    9e:7d:e8:5a:6a:35:7a:16:5c:99:fb:b6:8e:a9:ec:
+                    ec:7d:c0:bd:e7:7a:18:da:dc:f1:a3:0d:c3:7a:a1:
+                    60:28:c4:2b:62:7a:37:d5:5d:9d:55:52:e7:e9:e2:
+                    7b:91:df:7e:82:69:54:0c:9c:f5:a2:b5:23:e4:e9:
+                    6e:31:9a:33:36:4a:bf:ea:9d:ea:18:d4:ff:c7:cd:
+                    ac:f3:5c:35:4b:1b:c4:50:f1:a7:b1:0e:e9:0d:ef:
+                    b1:df:1a:58:39:36:f4:b4:c9:38:f3:af:2a:3a:8b:
+                    4a:ea:56:d9:5b:a6:73:c6:af:e7:5d:73:f3:de:9a:
+                    ba:e7:e2:98:e2:51:ed:7c:de:b1:e1:41:a9:1d:9b:
+                    13:97:07:8f:1f:57:1d:d3:62:06:30:9c:ea:76:0e:
+                    e4:7f:d2:6f:0c:a9:eb:7e:ad:e1:cf:7c:5f:5a:1b:
+                    0d:ff:bb:9b:68:e4:0d:fa:ff:b6:05:6e:7c:1e:c6:
+                    94:92:94:53:12:4f:06:df:11:fc:f1:f2:bc:e1:84:
+                    7a:8d:d1:9f:ed:ab:15:88:85:e0:eb:8d:ea:c2:28:
+                    fa:c0:fc:51:ab:fa:74:10:98:3a:30:2a:3d:ca:c7:
+                    37:ba:70:31:db:40:e0:4c:79:86:b9:30:98:4e:f1:
+                    b6:c7:4b:ea:5c:28:d7:3c:50:93:5f:fb:33:19:08:
+                    94:52:23:4d:75:6e:95:76:24:ad:4a:5d:73:29:20:
+                    2c:13:05:79:ae:b5:68:ca:c4:1b:cc:ed:5c:5e:e9:
+                    9e:9d:fd:69:02:9f:6e:60:90:7d:f0:5b:c9:7f:9c:
+                    86:8d:a9:b2:d9:f1:f8:50:43:fd:f6:37:e6:95:bb:
+                    7c:10:d7:80:da:57:e0:e8:20:f6:94:5e:d9:ee:1c:
+                    80:ac:9e:0f:72:f1:bb:37:76:58:30:bc:8d:5b:70:
+                    c7:8b:90:20:26:04:35:9a:07:2b:43:ce:ca:b0:05:
+                    db:78:39:7b:1a:d0:76:e0:5d:ae:a4:d3:b5:b1:ca:
+                    2a:f0:bc:6d:1e:a8:51:a9:b3:a1:09:ee:d8:84:36:
+                    3e:a0:12:65:00:ae:3a:9e:5e:91:36:86:5c:c7:32:
+                    ba:3a:ab:dd:ed:23:44:c6:84:9c:ea:20:34:bd:6b:
+                    ba:cc:58:4b:26:d5:c9:e7:be:c0:92:fc:62:71:8c:
+                    d8:2a:65:78:8e:46:22:55:24:0e:04:24:6a:e5:c7:
+                    f0:67:60:39:1f:4e:90:78:32:ec:2a:2e:e7:2a:4e:
+                    6c:2a:c1:49:f7:3c:3d:63:f7:b0:df:a2:1a:36:28:
+                    b3:f5:99:e1:34:11:87:81:c9:ab:bb:0b:d4:6e:3a:
+                    0c:02:1e:bd:40:ce:75:f8:e2:e1:9a:75:96:6c:b0:
+                    db:51:f0:e4:d0:c1:09:24:3f:be:b4:21:0e:f4:b2:
+                    71:49:11:c1:63:87:93:7c:c0:09:40:c2:01:e6:b4:
+                    6f:9f:1d:19:72:50:40:63:49:2d:d7:4d:1a:ac:58:
+                    14:e7
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                10:66:1E:48:6B:24:6C:B7:61:AA:51:F4:34:F8:35:9E:9B:D9:8D:7A
+            X509v3 Authority Key Identifier: 
+                3D:32:CA:37:D2:10:F9:50:86:56:0C:A3:71:F0:63:75:25:7C:AD:65
+            X509v3 Subject Alternative Name: 
+                DNS:localhost
+    Signature Algorithm: sha256WithRSAEncryption
+    Signature Value:
+        9d:f8:3f:ce:72:51:64:bf:97:84:1b:16:59:6e:17:e1:de:6d:
+        a3:d5:08:c5:4c:3d:ce:f8:24:0c:9f:9b:1b:92:83:91:a9:7b:
+        39:2e:aa:36:71:28:bc:1b:41:0f:68:ab:d2:ce:84:e1:5d:06:
+        df:8b:d4:ee:9c:51:88:81:be:17:42:ad:ee:12:0f:ec:a2:0a:
+        1c:00:ef:b2:c5:b3:24:9d:b0:25:04:df:a4:ef:ae:df:9d:68:
+        36:5e:11:73:25:d9:4c:73:f6:c7:c1:01:fa:e8:aa:8c:8a:4b:
+        fe:47:81:7a:0a:6f:ec:66:73:84:13:d1:1f:36:65:20:d3:a1:
+        25:12:c9:46:df:ac:3f:e8:44:1e:fe:0e:c4:82:d6:b5:85:43:
+        38:a4:e6:8e:92:e8:5b:fc:75:9d:78:a0:1b:4b:4f:d8:cf:74:
+        ae:46:a6:e4:7d:31:14:ea:36:76:ec:b1:d5:6c:fb:f6:e4:77:
+        6d:6d:62:3f:59:60:f4:a4:15:11:a3:5c:c5:47:ed:e1:3f:c5:
+        f6:e1:c7:e0:85:2f:5c:e8:72:7f:4a:ec:1f:3e:09:8e:45:a0:
+        b1:9b:dc:a7:af:7a:e4:4f:43:fc:72:62:36:b3:08:fe:ae:cc:
+        78:6d:fb:48:89:b0:4d:22:a5:2e:df:35:95:d9:7c:44:18:6b:
+        0a:9e:9b:ab:fa:54:da:72:a9:ac:59:42:98:4e:4c:f6:f2:01:
+        2c:fe:f5:f9:bd:2a:8a:fb:80:8f:6f:16:5e:3c:3f:4f:b3:73:
+        b7:fb:97:f1:d9:36:05:b2:09:e0:ff:45:27:99:f3:0c:20:ff:
+        0f:a6:3f:1c:91:66:02:ac:14:8a:47:52:25:35:f3:6c:34:df:
+        d6:e5:42:8e:0c:9a:27:c8:65:6d:01:bd:57:ce:94:56:89:eb:
+        d0:90:a0:3b:d5:a4:2e:90:bb:e8:54:52:27:10:0d:aa:39:3c:
+        4f:ac:b9:00:e4:d0:ea:54:15:73:16:a0:37:85:8b:18:08:52:
+        b4:7d:5a:e2:f7:af:94:31:80:42:5f:f0:1b:ee:78:c7:5d:7f:
+        fd:7b:38:84:35:25:d5:cb:43:4c:cc:01:26:7c:21:60:de:4d:
+        29:ee:0e:4b:fc:1a:39:68:33:b9:7d:81:ec:f2:de:6d:95:ad:
+        09:d0:c0:9e:4c:f8:c5:f2:31:06:ae:de:e0:29:4c:52:5f:40:
+        4b:b7:47:8b:be:0b:85:07:10:e1:c4:ce:b7:29:57:e1:94:4c:
+        44:e2:d9:ba:a0:ec:89:41:bb:8e:e7:25:16:e2:80:14:1d:09:
+        90:4d:0c:00:70:a7:78:bf:7c:c0:20:79:d6:56:aa:ff:6c:24:
+        ae:cd:63:d4:c2:04:10:c3
+-----BEGIN CERTIFICATE-----
+MIILjTCCCXWgAwIBAgICEA0wDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT
+MQswCQYDVQQIEwJERTETMBEGA1UEBxMKV2lsbWluZ3RvbjEnMCUGA1UEChMeVGhl
+IEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uMRowGAYDVQQLExFBcGFjaGUgVG9t
+Y2F0IFBNQzEeMBwGA1UEAxMVQXBhY2hlIFRvbWNhdCBUZXN0IENBMB4XDTI2MTEx
+MjE1MjQwMVoXDTI4MTExMTE1MjQwMVowgYgxCzAJBgNVBAYTAlVTMQswCQYDVQQI
+DAJERTETMBEGA1UEBwwKV2lsbWluZ3RvbjEnMCUGA1UECgweVGhlIEFwYWNoZSBT
+b2Z0d2FyZSBGb3VuZGF0aW9uMRowGAYDVQQLDBFBcGFjaGUgVG9tY2F0IFBNQzES
+MBAGA1UEAwwJbG9jYWxob3N0MIIHsjALBglghkgBZQMEAxIDggehABkxZpnMLYkU
+eeQXyoIjY6fTwKhX/JynpXcDVY0118olQ1KZp5AEIf2oc2qvY96HKs72wAVJ1dDf
+eo8wv8uDMvFLK0Zt2aVSnn2YVvscK0GQ0b6GyC6QSgWssGc9T0HS6cvxrCQOWvsd
+hur6cYlYKx8N9ydf17dhCv2IVIcaZbhFu7jjNp0zYvv4fNE3mTXfnysKDVJffUKD
+O9Wwsefq+47Gddh+7l99fWA44XztYhECkeENW4uIllsBATIp4fTGAXB+dQy87o8h
+lNYOOf94nLSJ80J1gieZKa4oHQ/UKOj+sQt2L+Rrvrb25VBeLTR85KrT3gfcxwm+
+rbinAC55JDJxk1hcAHX7XBPr1G/m2yduiGYlwbrW7uKPLePQk4o0JYGphdNUZPi4
+hJdkEdCs0ogfny4ig59AMIgA8/a9XzbFEdmdBUQ8t1i7VAg8Q9Cqw3mSmw9GKp8e
+b7dxXs8KMivq2+qiLnOkaBV0OVPBMI4gjVGgNEhOJBDNN0ZXXKGT8YvYIZjc2QPt
+Y967MRrEXqnIf289fKdD8EwVi5C1TPV7sSBdNaYCusI4quui+seU89/oyGgoMC/4
+81Cx97gFeyzf6vGvzw+M4tL5un90ixsA2AmgCPUW9DdE73iJYZJ3+M5dhpN1D5JG
+FZvosSaY4e8CjXgBDZYxWClEbutEY9u1f9MOpPCN3T3JyyhpFwnz9BUF5Pa9BYeB
+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
+-----END CERTIFICATE-----
diff --git a/test/org/apache/tomcat/util/net/localhost-mldsa-65-key.pem 
b/test/org/apache/tomcat/util/net/localhost-mldsa-65-key.pem
new file mode 100644
index 0000000000..88208343d8
--- /dev/null
+++ b/test/org/apache/tomcat/util/net/localhost-mldsa-65-key.pem
@@ -0,0 +1,88 @@
+-----BEGIN PRIVATE KEY-----
+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
+NbAux3ZiGnTCwijG4Ag0S5cY
+-----END PRIVATE KEY-----
diff --git a/test/org/apache/tomcat/util/net/localhost-mldsa-87-cert.pem 
b/test/org/apache/tomcat/util/net/localhost-mldsa-87-cert.pem
new file mode 100644
index 0000000000..67c47aa911
--- /dev/null
+++ b/test/org/apache/tomcat/util/net/localhost-mldsa-87-cert.pem
@@ -0,0 +1,305 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 4110 (0x100e)
+        Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=DE, L=Wilmington, O=The Apache Software Foundation, 
OU=Apache Tomcat PMC, CN=Apache Tomcat Test CA
+        Validity
+            Not Before: Nov 12 15:24:01 2026 GMT
+            Not After : Nov 11 15:24:01 2028 GMT
+        Subject: C=US, ST=DE, L=Wilmington, O=The Apache Software Foundation, 
OU=Apache Tomcat PMC, CN=localhost
+        Subject Public Key Info:
+            Public Key Algorithm: ML-DSA-87
+                ML-DSA-87 Public-Key:
+                pub:
+                    50:e1:6c:d1:06:8c:b4:43:ff:03:40:ee:ca:7d:a7:
+                    95:f9:d7:09:95:06:3e:f9:2e:9b:d9:16:5c:fb:d2:
+                    22:fc:77:71:f2:51:c5:f3:b0:91:f4:89:94:83:71:
+                    7c:fb:a9:59:45:fb:d3:ef:69:98:9f:97:17:eb:1d:
+                    3c:fa:03:97:91:83:16:54:e9:fd:76:cb:a5:b0:20:
+                    b2:a9:aa:a5:da:04:0d:ec:3e:37:f9:2c:76:f6:90:
+                    4d:68:a7:51:e3:87:03:42:e1:b0:1b:2d:a3:a2:9b:
+                    e4:bf:f9:53:bd:dd:76:6d:79:ee:b2:60:a1:9e:d9:
+                    50:07:1b:dd:2a:97:54:6d:9f:30:0c:cd:2a:c3:87:
+                    55:1d:1b:71:47:84:ba:a5:fa:a8:9b:ef:e3:76:4b:
+                    2d:7c:a0:d1:1d:37:07:2c:7a:d7:f3:93:9f:78:d3:
+                    40:45:65:c9:50:d4:a6:a1:92:89:33:95:8a:1b:b4:
+                    cc:79:37:0d:b0:35:8f:a2:b2:89:44:e5:68:2a:7e:
+                    a1:5c:12:41:8f:2e:25:54:ef:2f:4a:d4:d2:95:6c:
+                    d2:7f:1d:27:9e:ce:fa:9b:5f:43:80:be:91:fc:58:
+                    0d:91:3b:d6:9d:02:e1:c6:08:63:bc:9a:9a:67:81:
+                    b6:f5:ed:d3:bf:77:25:51:34:1b:0f:63:f4:5d:f9:
+                    1c:66:7b:a6:c7:c9:27:81:b5:d8:14:4e:0b:c9:f1:
+                    ab:2e:88:ca:74:47:d4:48:fd:30:df:30:0e:6e:75:
+                    49:7b:e4:07:22:d2:30:11:e9:64:45:45:d7:4d:43:
+                    ab:6c:fe:ce:d9:9f:a1:7a:fa:a4:a1:1e:a0:52:6b:
+                    b8:8a:c0:81:24:c2:08:9c:6d:56:46:b7:08:99:71:
+                    ac:eb:a1:09:b6:a7:c9:e5:00:77:dd:2c:28:8f:49:
+                    6c:48:13:79:a5:b8:6f:c5:ee:d6:9d:95:a6:85:04:
+                    ab:b1:fc:f6:88:1a:52:27:e7:8a:3b:c9:17:aa:30:
+                    20:12:73:ee:b9:dc:f9:7b:99:5f:6d:a4:c7:07:43:
+                    59:09:fa:d1:2f:0a:e3:2f:be:5d:92:f6:09:01:0f:
+                    56:36:07:3a:7e:9f:f9:3f:b1:c1:ef:d7:04:67:6f:
+                    7d:a0:ae:ec:ee:a8:06:26:56:79:ba:e8:b8:4b:0f:
+                    56:02:cc:45:98:a6:4b:09:c5:8e:a3:1c:e2:8f:bc:
+                    ec:0b:29:5e:00:52:4a:1c:94:fc:92:1d:ce:e7:8f:
+                    17:af:16:8a:92:1d:78:f7:46:cb:12:50:bf:73:1d:
+                    04:01:6a:c1:33:f7:d0:9d:9a:43:66:fc:68:54:28:
+                    01:e1:d6:1f:f4:5c:5d:90:70:16:55:94:f8:d8:0c:
+                    60:b2:27:61:b7:d5:9d:ae:4f:ce:dc:1c:22:bb:cb:
+                    0a:a1:ff:84:f8:50:ff:74:36:7d:42:fa:d2:ad:8f:
+                    10:ec:0b:71:43:46:3d:ca:a2:86:4a:00:0d:d4:76:
+                    dc:51:06:d1:0f:b1:14:d9:b2:00:21:b7:56:09:8d:
+                    8d:4e:5a:f7:2b:0b:bf:a4:ed:c8:65:8b:f3:f7:23:
+                    d4:87:5a:30:1d:1c:ac:14:dd:68:01:48:6b:a5:c5:
+                    16:d2:f0:93:63:75:97:9b:51:26:fd:49:f2:cd:6b:
+                    d0:13:69:92:ae:03:a2:88:c6:e7:dd:f7:61:27:c2:
+                    13:be:7c:a4:17:72:24:63:05:05:7a:d1:a5:53:47:
+                    19:15:af:b1:73:a0:2b:20:0c:68:f6:3f:c6:e7:24:
+                    77:cd:b6:49:d5:e0:02:f3:3a:ce:d1:04:55:a7:36:
+                    65:c5:51:4c:54:07:47:7a:cf:9e:67:45:59:81:95:
+                    84:91:6f:2f:f0:94:4f:ac:26:52:ac:20:9c:2e:b6:
+                    59:f3:e7:a6:d0:34:8a:4a:71:eb:3c:b1:bb:7d:da:
+                    b7:37:a7:53:1f:8a:c2:bb:72:b4:73:f3:18:7f:87:
+                    aa:d4:b2:60:c6:84:72:55:57:4f:4c:53:7b:86:6a:
+                    06:ae:41:16:c0:ce:e5:9b:19:08:5c:40:88:89:18:
+                    33:d4:7b:2c:76:f0:f3:8b:63:a5:4d:27:97:cc:b9:
+                    65:fc:9f:71:cc:0c:c7:6b:9e:fb:3e:5b:61:60:51:
+                    18:7b:7d:43:7b:c6:d3:0e:8c:29:7b:c8:5d:84:ec:
+                    03:b0:14:1f:dc:c2:54:70:13:44:65:d5:1e:4d:49:
+                    8a:0d:aa:7b:8a:eb:7f:09:04:eb:cf:72:de:68:51:
+                    7e:58:a0:1d:5f:dc:62:cb:2f:c4:1a:c0:49:12:09:
+                    6d:46:b2:61:a7:2b:5b:d5:08:f1:51:1b:50:07:89:
+                    b0:0c:91:d8:90:df:62:72:65:b2:30:0f:c2:b1:5b:
+                    50:87:fa:89:ea:21:c0:dc:a1:39:c8:53:4c:98:5c:
+                    a9:37:81:af:1b:39:ef:96:b7:62:df:43:2d:5b:a8:
+                    1f:f2:29:5f:cb:d1:6f:82:f5:12:6e:e6:8d:96:f7:
+                    e7:86:14:ed:0b:81:9b:9f:97:a9:dc:06:23:b8:d7:
+                    f1:9f:98:a3:51:a0:b3:54:41:2b:f0:cf:c0:03:c2:
+                    63:57:20:b0:d9:31:fe:b1:c4:0b:67:82:a2:58:66:
+                    51:87:f5:41:74:f1:40:ce:5f:3a:c4:3d:26:6a:92:
+                    c1:4e:46:3a:45:84:32:57:0f:47:50:fc:ac:71:52:
+                    fe:6e:80:43:26:33:a5:c0:87:80:1c:d6:bf:9d:d5:
+                    7b:81:a6:ca:dd:76:30:3c:a0:a5:a6:8a:c1:2e:a1:
+                    cb:6d:a5:ee:32:bd:ae:9f:f9:e2:a5:e1:f8:8d:43:
+                    69:29:73:76:dc:94:26:a3:0d:c1:83:18:a2:ca:7c:
+                    1e:93:77:47:23:f1:9a:af:45:ac:17:2c:b6:b9:a3:
+                    dd:ce:a0:41:ee:ff:a3:67:0a:a3:51:c5:b2:75:7d:
+                    1f:7e:6b:2f:e2:e5:b3:20:15:c9:76:da:66:89:39:
+                    b3:a2:b1:79:9a:f9:f4:79:ba:4e:9f:92:57:6f:8b:
+                    c8:37:f5:a1:31:fe:94:87:5b:2b:1e:60:29:89:ea:
+                    c9:d0:cd:71:a8:d9:5d:49:c7:4f:f2:99:cb:91:af:
+                    48:da:79:03:a3:f5:d5:23:2e:2a:24:15:d3:22:f1:
+                    8d:ba:d1:82:a2:4c:da:a8:db:0b:d5:9d:70:95:60:
+                    d9:9b:64:b3:12:30:a9:63:d3:cc:ce:da:14:64:bc:
+                    ff:00:30:97:30:c3:44:9f:64:ba:4f:ba:b3:38:58:
+                    89:21:b6:9d:f3:5b:2f:7f:99:e2:9e:4e:f3:28:8e:
+                    dc:3b:42:06:08:77:3f:ee:32:32:14:2e:03:01:3a:
+                    63:91:0a:14:4e:14:5c:9f:c8:42:6a:6e:55:0d:ff:
+                    b5:44:43:fd:db:b7:5a:e1:3d:27:8f:ee:43:8a:99:
+                    0c:33:80:4b:2b:98:90:2b:3e:4d:e2:e4:d7:87:f7:
+                    6f:be:84:24:6d:ff:50:2f:ed:32:bf:ed:2e:34:98:
+                    7c:dc:5b:6e:90:b6:72:26:67:79:2d:a4:a3:6f:23:
+                    63:66:e1:94:04:a2:c5:cd:df:4c:32:66:59:14:77:
+                    4e:53:3a:1a:87:fc:8d:87:c4:e5:29:44:40:58:de:
+                    ec:b3:34:ab:2f:1e:c7:7d:57:b3:5e:25:78:d0:22:
+                    7a:eb:c8:8b:f6:e0:c8:b3:96:aa:6d:fe:f4:37:35:
+                    b1:5b:96:0a:b6:29:5f:8c:7d:5a:08:84:40:ad:20:
+                    8d:c1:2a:3d:0b:49:bc:cf:e1:b3:dc:09:25:2c:7c:
+                    92:ca:56:5e:d6:d3:a7:85:e8:37:97:62:fb:3a:df:
+                    ca:e4:fe:22:01:44:0d:dc:4a:d5:a4:fc:79:1e:20:
+                    aa:97:6b:f4:5e:31:37:9e:b1:d7:d9:82:ee:3a:b9:
+                    3f:47:d7:bd:c2:37:0d:21:7f:ac:51:03:12:96:be:
+                    cc:65:d3:16:14:6e:8d:af:21:5f:14:8f:d1:d2:5a:
+                    2b:59:ae:5d:6b:70:c1:ee:06:1b:e0:f5:6a:69:c5:
+                    ce:a5:28:0f:f5:8c:8d:4b:f0:27:e0:93:e8:21:63:
+                    81:42:c6:e8:20:dd:37:40:5b:ac:46:a6:39:e1:8d:
+                    a6:d3:7e:9d:5c:cf:15:ae:e9:aa:44:dc:f0:25:fc:
+                    e8:ed:76:b4:fd:ad:6c:ed:8c:20:0d:f7:9c:3e:6e:
+                    70:bd:76:f5:55:3a:8a:6e:ec:c0:51:88:41:84:4c:
+                    88:56:56:81:e0:11:fa:d0:e7:21:42:f0:26:7c:e7:
+                    ad:0c:a8:03:9c:62:33:12:f7:5b:a1:a3:6f:bd:f2:
+                    10:c4:0c:d8:82:17:49:57:0d:62:34:7c:b6:18:90:
+                    8d:48:46:23:e0:95:89:f6:05:ed:0a:1a:2d:16:d3:
+                    0b:92:a7:cd:d6:8e:98:33:ad:e0:2b:cf:bf:58:44:
+                    ec:6a:87:fe:6d:7a:c9:a7:1f:a8:9d:1b:e4:d9:ad:
+                    16:36:1b:7c:59:13:5f:cb:e0:8c:0a:49:53:30:36:
+                    68:2f:dc:ac:db:79:19:2f:cf:17:f6:50:f2:33:46:
+                    f1:4e:ad:a6:bf:60:f9:93:ce:0d:98:3d:25:82:d3:
+                    55:3a:0e:21:17:8a:4a:c1:50:05:bb:ab:0a:4e:ec:
+                    b0:b3:4b:25:6d:c1:85:a5:9c:89:e4:83:7c:6f:a3:
+                    33:bb:6e:6f:52:a4:3d:7e:8d:ce:d6:f7:2f:a1:45:
+                    06:e1:3a:34:93:93:54:43:4e:93:d8:d7:d6:fc:b2:
+                    24:6b:de:4f:0f:bb:5b:14:a5:fc:98:fe:f0:12:1e:
+                    be:e6:77:e2:5e:85:1d:f2:5d:c0:1a:1c:47:86:e5:
+                    5a:ef:72:25:91:cb:83:d2:52:c3:93:e1:54:d2:06:
+                    bd:9e:d6:48:bd:fe:4f:dc:80:88:75:e0:6a:2e:3c:
+                    19:bd:09:7d:5e:6c:f8:c9:f6:48:ff:11:8f:0d:44:
+                    c7:eb:b0:8c:a5:d5:f4:6a:c7:36:41:50:70:73:3f:
+                    c8:5a:fe:a3:85:4f:87:56:d9:a3:fe:7e:fe:87:13:
+                    95:ff:8e:48:72:a3:00:2a:9a:09:27:c8:b1:17:08:
+                    89:f7:a0:cc:e8:65:d7:0b:af:78:ea:16:58:b9:61:
+                    8c:85:a2:fd:dc:9b:ed:73:ab:5d:ca:ea:b7:bc:7f:
+                    8b:89:98:ae:e4:52:a7:ae:54:63:05:30:f3:0f:a4:
+                    0c:af:ab:c2:44:77:a3:ca:4f:b1:e0:52:90:94:8f:
+                    68:0f:c6:26:85:67:29:e9:59:89:d5:c9:51:e5:a9:
+                    96:92:4e:01:c8:c7:dc:85:54:1c:bf:5d:e3:aa:9c:
+                    b9:0d:b0:4c:35:03:ff:e8:63:ae:73:4d:08:8b:8a:
+                    5b:7c:7a:3f:78:84:ed:af:37:d0:ec:9b:4f:c4:e6:
+                    9a:1a:cf:91:b3:d1:70:6d:84:64:83:08:e3:39:9a:
+                    45:09:2d:97:66:2f:8c:95:f9:86:7c:44:3a:5e:c4:
+                    98:96:fa:53:db:1e:f5:e7:81:44:29:a6:15:ba:15:
+                    a7:7e:cf:ce:05:e7:4a:ce:12:db:23:ba:09:36:69:
+                    6f:6f:f0:51:0c:5a:c6:30:2a:11:9f:00:f0:13:be:
+                    58:72:df:60:e9:db:26:59:ac:fa:68:36:ee:f7:9c:
+                    45:e7:f5:76:ed:fa:d2:26:cb:b3:b8:87:05:e3:88:
+                    5c:b3:c1:bf:a6:37:ef:71:ce:a8:52:d6:12:2a:88:
+                    b4:a7:d3:bb:50:66:0c:0a:02:c9:4e:eb:a4:82:ac:
+                    8d:3e:86:31:fd:2c:ba:18:7e:b8:02:3a:49:2c:47:
+                    25:d7:6a:9e:ef:06:1f:e9:28:05:1a:37:76:f0:52:
+                    bd:e6:a2:fe:31:76:52:06:db:a9:b9:40:05:7f:a2:
+                    6e:99:7e:2e:4e:81:36:ad:39:67:a8:29:e6:49:0b:
+                    51:93:0e:56:63:6c:de:1f:38:ce:48:68:a7:40:ad:
+                    4b:e3:75:e9:3b:e1:12:b0:96:23:08:93:fa:5d:36:
+                    e1:9c:1d:ac:c5:0d:8c:66:4a:c3:7f:d7:44:03:cc:
+                    db:0f:21:69:d0:41:b5:2a:71:08:fe:9d:66:16:70:
+                    ca:81:1c:27:3f:1e:57:1a:cb:d8:b0:99:86:33:04:
+                    a6:ad:ec:02:51:fa:9d:29:6c:76:c7:72:91:e4:90:
+                    27:5e:9f:7a:09:a1:96:5b:32:b7:8d:dc:0b:8a:b5:
+                    74:75:14:7b:68:99:18:d3:44:1d:bb:32:ea:f4:d0:
+                    b0:17:59:64:7e:ce:b5:05:63:9f:0e:de:f7:86:f7:
+                    67:bf:25:fe:b5:8f:49:c0:e1:83:36:0c:e5:74:20:
+                    ab:7e:80:b5:8b:6c:76:5c:52:aa:8b:dc:f7:24:dc:
+                    61:ba:6b:2e:e4:95:9a:7d:ec:08:a6:99:26:0b:fa:
+                    9e:f1:23:5a:39:a8:97:53:d8:92:54:d3:83:48:40:
+                    44:24:f6:49:f0:de:4e:86:c1:90:ed:cf:67:fc:8c:
+                    42:7c:c7:41:7b:fa:1b:ca:34:e8:d6:a2:a0:e2:62:
+                    66:4c:3b:49:d8:4d:41:97:e8:a3:4c:3f:ff:31:a8:
+                    c5:e3:f2:34:1b:03:6e:db:1b:d1:ab:12:8c:66:84:
+                    01:54:b0:ab:f1:f2:55:8d:8b:00:7c:74:e2:ff:5a:
+                    87:9a:f5:a4:ad:c6:0f:f0:7e:37:1b:a4:8f:62:fe:
+                    a9:8f:19:25:85:d9:83:9f:1a:34:f6:3a:3f:72:96:
+                    ad:d7:82:a8:b5:70:a8:9e:ea:01:f2:6b:c6:42:d3:
+                    d8:d8:f1:99:22:bc:bf:77:7f:db:15:cf:7e:da:8d:
+                    ca:38:2e:5b:a4:cc:90:c4:9b:d6:00:d1:f2:90:8a:
+                    1a:64:3f:97:e6:cf:46:fe:c1:e2:76:27:e5:d5:31:
+                    6c:43:84:95:52:b0:11:57:93:5d:7c:85:83:a3:d4:
+                    72:d4:71:6d:9b:3a:0d:5e:a0:59:49:ae
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                B6:E9:EE:AB:49:5F:C6:D0:DD:E1:04:BF:28:74:75:80:F2:54:33:8A
+            X509v3 Authority Key Identifier: 
+                3D:32:CA:37:D2:10:F9:50:86:56:0C:A3:71:F0:63:75:25:7C:AD:65
+            X509v3 Subject Alternative Name: 
+                DNS:localhost
+    Signature Algorithm: sha256WithRSAEncryption
+    Signature Value:
+        02:30:99:14:a5:1e:d2:0a:d7:60:dc:e7:20:74:17:6f:29:43:
+        2e:a6:7f:18:b7:0d:81:0d:55:df:4e:cc:bd:1f:39:0e:fa:3f:
+        d9:cb:94:27:38:51:97:6f:52:e0:6c:b2:33:32:74:51:14:49:
+        c0:36:b9:15:d7:d3:53:e4:5e:7d:c2:76:18:ba:65:f4:bb:9f:
+        c9:34:6d:fc:c7:43:d6:c3:a1:ee:dd:99:ea:dd:cb:5e:3b:6e:
+        27:b8:19:02:b3:2c:da:05:af:05:65:d2:4b:83:60:7c:65:f4:
+        6f:2b:ed:76:51:0a:28:28:4f:06:ee:40:4a:38:10:0e:c8:58:
+        03:0c:d4:27:93:b3:45:41:ba:e7:bc:06:2e:72:3b:92:ef:59:
+        de:74:57:f0:72:87:b6:e9:dd:55:d1:9f:9b:bc:ed:a5:7c:d6:
+        e9:47:eb:5f:21:b8:e7:59:37:69:23:9f:16:13:c3:a5:76:b3:
+        c0:dc:dc:7b:f9:cd:16:fc:d7:0d:a2:26:e3:41:58:af:f3:b2:
+        16:a8:25:e9:bf:37:fa:21:ee:d4:f4:8d:90:08:04:86:55:30:
+        c3:b4:2b:2a:e2:35:1c:6a:ab:3c:29:95:25:a0:1a:0f:d7:ba:
+        32:f8:a4:a1:7a:c2:b1:86:e7:3f:1f:92:5f:37:e9:f3:c6:ec:
+        a6:90:84:a2:cb:2d:f8:fe:13:a8:82:81:1f:6f:c7:b7:76:df:
+        e5:f6:6a:d3:5e:b6:22:04:f9:0b:bb:d4:27:55:32:8c:6d:61:
+        c0:64:4e:50:1d:b8:8f:05:d6:c6:70:4f:a1:95:c4:69:10:78:
+        c5:46:5e:4f:c1:0b:59:e3:96:3b:85:cc:16:d1:40:5d:bc:3f:
+        5a:cb:4c:41:bc:80:5e:42:59:93:2f:c3:3d:c6:a1:9b:f5:9d:
+        05:02:6e:16:5f:47:a3:f6:6c:a5:45:b0:99:11:e6:fe:58:b1:
+        03:28:7b:fe:f3:c6:92:7d:0b:a7:c4:85:8f:95:5e:f9:3b:50:
+        a4:81:8e:ac:34:87:de:4d:44:9c:65:a2:77:67:79:87:9d:7e:
+        c9:94:7c:cf:13:af:91:35:68:04:bb:28:58:fe:be:ce:ae:f2:
+        5b:73:fc:3e:8f:4d:4f:5e:d4:3c:10:aa:5f:1d:2f:b0:24:b0:
+        51:32:52:f2:7b:81:5e:b8:4e:dd:aa:5c:ac:b6:58:66:37:ea:
+        c6:bd:d7:7f:3e:aa:2b:34:c0:8e:5e:0f:d4:96:4f:b4:e8:32:
+        dc:c4:ea:84:e0:d3:21:c6:72:4c:a5:c5:b7:04:09:22:b3:8e:
+        45:c3:3b:57:f5:c1:86:c0:56:7a:42:64:d5:ea:b0:dd:7b:58:
+        1e:4e:40:06:54:ae:4b:95
+-----BEGIN CERTIFICATE-----
+MIIODTCCC/WgAwIBAgICEA4wDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT
+MQswCQYDVQQIEwJERTETMBEGA1UEBxMKV2lsbWluZ3RvbjEnMCUGA1UEChMeVGhl
+IEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uMRowGAYDVQQLExFBcGFjaGUgVG9t
+Y2F0IFBNQzEeMBwGA1UEAxMVQXBhY2hlIFRvbWNhdCBUZXN0IENBMB4XDTI2MTEx
+MjE1MjQwMVoXDTI4MTExMTE1MjQwMVowgYgxCzAJBgNVBAYTAlVTMQswCQYDVQQI
+DAJERTETMBEGA1UEBwwKV2lsbWluZ3RvbjEnMCUGA1UECgweVGhlIEFwYWNoZSBT
+b2Z0d2FyZSBGb3VuZGF0aW9uMRowGAYDVQQLDBFBcGFjaGUgVG9tY2F0IFBNQzES
+MBAGA1UEAwwJbG9jYWxob3N0MIIKMjALBglghkgBZQMEAxMDggohAFDhbNEGjLRD
+/wNA7sp9p5X51wmVBj75LpvZFlz70iL8d3HyUcXzsJH0iZSDcXz7qVlF+9PvaZif
+lxfrHTz6A5eRgxZU6f12y6WwILKpqqXaBA3sPjf5LHb2kE1op1HjhwNC4bAbLaOi
+m+S/+VO93XZtee6yYKGe2VAHG90ql1RtnzAMzSrDh1UdG3FHhLql+qib7+N2Sy18
+oNEdNwcsetfzk59400BFZclQ1KahkokzlYobtMx5Nw2wNY+isolE5WgqfqFcEkGP
+LiVU7y9K1NKVbNJ/HSeezvqbX0OAvpH8WA2RO9adAuHGCGO8mppngbb17dO/dyVR
+NBsPY/Rd+Rxme6bHySeBtdgUTgvJ8asuiMp0R9RI/TDfMA5udUl75Aci0jAR6WRF
+RddNQ6ts/s7Zn6F6+qShHqBSa7iKwIEkwgicbVZGtwiZcazroQm2p8nlAHfdLCiP
+SWxIE3mluG/F7tadlaaFBKux/PaIGlIn54o7yReqMCASc+653Pl7mV9tpMcHQ1kJ
++tEvCuMvvl2S9gkBD1Y2Bzp+n/k/scHv1wRnb32gruzuqAYmVnm66LhLD1YCzEWY
+pksJxY6jHOKPvOwLKV4AUkoclPySHc7njxevFoqSHXj3RssSUL9zHQQBasEz99Cd
+mkNm/GhUKAHh1h/0XF2QcBZVlPjYDGCyJ2G31Z2uT87cHCK7ywqh/4T4UP90Nn1C
++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
+lQ==
+-----END CERTIFICATE-----
diff --git a/test/org/apache/tomcat/util/net/localhost-mldsa-87-key.pem 
b/test/org/apache/tomcat/util/net/localhost-mldsa-87-key.pem
new file mode 100644
index 0000000000..894ff613bd
--- /dev/null
+++ b/test/org/apache/tomcat/util/net/localhost-mldsa-87-key.pem
@@ -0,0 +1,106 @@
+-----BEGIN PRIVATE KEY-----
+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
+LvFGlraV/MX4SMQoDwLgLfSQ
+-----END PRIVATE KEY-----
diff --git a/test/org/apache/tomcat/util/net/localhost-rsa-dnsonly.jks 
b/test/org/apache/tomcat/util/net/localhost-rsa-dnsonly.jks
new file mode 100644
index 0000000000..734062957d
Binary files /dev/null and 
b/test/org/apache/tomcat/util/net/localhost-rsa-dnsonly.jks differ
diff --git a/test/org/apache/tomcat/util/net/localhost-rsa-largecert.jks 
b/test/org/apache/tomcat/util/net/localhost-rsa-largecert.jks
new file mode 100644
index 0000000000..9a0616927a
Binary files /dev/null and 
b/test/org/apache/tomcat/util/net/localhost-rsa-largecert.jks differ
diff --git a/test/org/apache/tomcat/util/net/testuser-mldsa-65-cert.pem 
b/test/org/apache/tomcat/util/net/testuser-mldsa-65-cert.pem
new file mode 100644
index 0000000000..c533bc5cff
--- /dev/null
+++ b/test/org/apache/tomcat/util/net/testuser-mldsa-65-cert.pem
@@ -0,0 +1,247 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 4111 (0x100f)
+        Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=DE, L=Wilmington, O=The Apache Software Foundation, 
OU=Apache Tomcat PMC, CN=Apache Tomcat Test CA
+        Validity
+            Not Before: Nov 12 15:24:09 2026 GMT
+            Not After : Nov 11 15:24:09 2028 GMT
+        Subject: C=US, ST=DE, L=Wilmington, O=The Apache Software Foundation, 
OU=Apache Tomcat PMC, CN=testuser
+        Subject Public Key Info:
+            Public Key Algorithm: ML-DSA-65
+                ML-DSA-65 Public-Key:
+                pub:
+                    06:35:a3:97:e3:23:8d:92:61:72:3f:fc:c1:ca:bc:
+                    ba:4a:d5:53:20:42:64:31:0d:91:6a:86:47:92:c6:
+                    f6:11:e1:40:ec:2e:08:2f:54:c2:f3:dc:77:e6:06:
+                    6b:fb:13:97:bb:ab:e3:c8:9f:95:e4:a3:a7:36:ee:
+                    5c:19:20:da:51:fa:16:33:6e:a7:a2:0e:bb:4c:33:
+                    54:13:c1:cd:32:36:bc:68:d6:40:41:f2:d9:9c:2a:
+                    63:c9:b0:a8:84:91:cc:3c:c4:90:89:01:1f:05:50:
+                    f4:15:7c:15:b4:fb:da:be:82:ae:8e:ac:36:83:8d:
+                    2e:ab:85:0e:59:56:d1:a5:e0:67:d1:42:34:47:e5:
+                    aa:b4:7b:57:96:88:0e:5f:fe:15:72:91:38:32:0f:
+                    7d:2c:ba:25:e4:29:af:9d:a9:3b:6d:3e:4a:3a:6f:
+                    8e:2b:13:e6:52:74:6b:3c:83:96:ec:5b:59:b7:5a:
+                    40:ef:f2:85:a6:f9:9b:7b:4a:a6:63:a4:c7:49:0b:
+                    ce:a9:44:c7:8a:30:a8:ca:6f:31:78:d7:8e:f7:61:
+                    ce:d9:d2:45:6b:ea:df:08:e5:9e:75:88:52:bd:fb:
+                    ed:82:c0:e7:e9:70:d0:89:bc:3b:95:9f:0a:cd:ba:
+                    c7:8c:28:95:d7:fd:40:e8:f3:30:22:57:8f:19:d3:
+                    26:aa:d2:c7:65:e3:20:9b:78:c4:85:e2:e5:f0:a7:
+                    aa:2e:5c:40:b4:6f:a8:f7:f5:32:48:46:25:fa:c6:
+                    9c:05:ec:2a:af:50:f6:58:44:66:65:6b:a6:fd:8d:
+                    eb:64:5f:79:6b:04:fc:fa:e5:83:12:1a:67:a4:d0:
+                    1a:2b:12:0c:52:48:6c:95:4e:cb:35:6c:dc:43:59:
+                    fb:94:50:d1:15:8b:de:14:f1:2f:e6:0e:3d:1a:b4:
+                    f3:f5:86:f1:f6:e3:5e:9c:e5:15:69:ce:b5:93:68:
+                    a5:3e:5b:05:c2:c3:94:15:72:e4:88:49:d8:9a:66:
+                    28:ed:da:f8:c7:2d:7c:ca:40:57:dc:91:ef:cd:de:
+                    ec:96:9e:85:31:43:49:c8:a8:31:bd:94:75:e4:e6:
+                    9b:57:40:fd:85:fb:aa:10:6c:d0:9f:dd:98:e8:35:
+                    7a:a1:5e:6a:ff:e9:1f:6f:be:c0:0e:f8:0e:eb:15:
+                    a5:05:2d:af:1d:95:fc:08:49:ee:5a:8c:68:39:b7:
+                    a4:26:6a:da:cf:00:ae:ec:7f:b2:5e:7b:f7:33:f2:
+                    b2:7c:9b:0f:6a:41:df:9a:2b:12:52:f5:b8:bd:37:
+                    7a:24:6a:ca:7e:1b:4f:cc:96:a9:cd:d6:f4:5d:1f:
+                    97:b7:8b:48:d3:78:9d:00:1a:b0:cd:42:eb:73:4b:
+                    61:bc:b3:e0:aa:dc:bd:f7:54:a3:1c:b2:06:fd:24:
+                    1d:0c:31:cf:ed:c8:de:c9:ed:eb:16:9c:ee:b7:e1:
+                    87:29:c9:6d:e5:a3:d4:96:f8:fc:16:15:bf:30:b0:
+                    09:49:4f:c6:ce:d3:2a:e7:3d:d4:5a:fa:a9:b6:4e:
+                    5d:ea:aa:9a:9c:f6:c8:6d:60:c5:17:f2:a9:a0:59:
+                    ac:e6:e1:64:d6:38:31:2d:84:e7:9f:24:7e:e3:61:
+                    31:2f:e7:1a:de:f9:e0:34:18:08:bb:59:69:ba:9f:
+                    cc:af:2b:92:12:75:c9:81:fe:d2:bb:18:e7:68:b4:
+                    2a:77:db:aa:1e:3f:19:58:be:35:f4:c6:1c:39:2b:
+                    ed:a6:db:11:54:d9:e0:6a:a1:05:e0:1f:d7:5c:eb:
+                    d8:a3:da:4c:8b:81:96:a8:71:91:4e:29:d0:c9:e7:
+                    7d:29:81:59:fb:34:95:66:c3:07:62:62:55:b8:80:
+                    78:77:d8:ff:33:08:61:78:66:85:82:90:63:09:6e:
+                    ad:93:13:92:67:e3:46:e9:18:b9:56:6d:0f:9b:a8:
+                    fe:4b:90:94:1f:ab:bf:9f:e8:66:0c:d5:07:b9:82:
+                    bd:fa:54:df:5e:53:65:2b:6a:b6:b9:aa:bd:5e:c5:
+                    4d:64:4c:37:e1:2d:1c:dd:5f:f5:64:48:93:9f:eb:
+                    3a:42:1c:73:c8:f1:d9:5a:ad:cd:df:b8:6e:03:77:
+                    58:2e:b8:cf:ad:50:28:79:58:02:66:dc:34:e0:9a:
+                    82:d8:f9:af:2a:ea:f0:86:68:40:9e:37:25:b3:7f:
+                    86:bd:42:de:26:27:b9:51:e4:7a:c9:53:28:bc:1b:
+                    7d:1f:dc:09:30:6b:a7:3f:85:04:86:ff:73:17:68:
+                    e4:17:bd:ce:73:51:78:3b:5a:8d:a4:83:20:06:ab:
+                    59:28:a3:dd:54:a1:fe:6b:68:4b:08:47:6c:45:d0:
+                    e4:f9:ef:55:cf:47:47:1d:a6:a9:ca:4f:2a:64:ce:
+                    b3:09:a4:e3:ae:47:c0:8a:73:c0:c5:7f:ab:c6:8a:
+                    88:83:5e:1c:83:87:f6:e6:f6:6c:22:d1:5b:64:40:
+                    3b:51:24:99:39:d4:4b:8d:35:c6:4d:e5:9c:52:5e:
+                    bc:1b:0c:85:f3:27:e9:77:eb:b3:2a:58:24:eb:30:
+                    02:4b:6b:fd:4a:39:4b:9e:b8:5d:dd:9d:c2:f2:c8:
+                    47:ff:06:b6:f6:23:b2:3b:45:b2:3e:8d:df:4a:e2:
+                    fa:9a:3b:3b:88:6c:25:0a:44:ad:13:a1:35:93:7a:
+                    ce:a0:f2:96:15:51:be:2f:49:c9:9e:67:3b:98:f0:
+                    d1:5e:b0:b3:9f:8a:de:d2:30:be:a6:b6:6c:a0:4a:
+                    d2:cc:ad:64:9b:ee:49:7f:21:f9:7d:33:c6:73:90:
+                    2f:b3:33:e1:f5:52:47:75:5f:95:e0:07:e3:5a:cf:
+                    ae:f8:15:a7:65:7c:76:88:ac:bb:6b:b8:d9:f9:58:
+                    62:80:3d:1f:34:df:8c:40:11:ae:a2:44:9c:ca:6a:
+                    6d:e6:ac:cd:d9:11:62:d4:29:f2:ab:d7:87:71:c4:
+                    32:7f:7d:34:05:aa:10:9f:87:d8:46:4a:22:78:8c:
+                    b8:fd:66:63:f3:01:b5:06:d5:c7:b7:a0:5e:e3:06:
+                    0b:ce:61:e2:65:b7:e1:3d:1f:5f:1b:ce:f6:68:48:
+                    98:74:3f:12:90:d5:7f:d1:2c:8e:42:d1:89:6e:8f:
+                    5b:38:2e:ba:b3:4b:3f:91:5e:18:ca:f0:df:6f:cd:
+                    45:a4:2e:b5:d8:2d:77:d5:a0:53:92:a0:9c:3c:91:
+                    79:8e:e5:c5:31:1f:97:23:d7:88:8a:d6:bc:58:59:
+                    cd:da:08:cd:27:5f:47:16:b6:27:fa:7b:ac:47:24:
+                    48:d7:ff:e2:b0:61:90:47:87:01:07:4a:3a:fa:b8:
+                    58:18:a2:30:31:14:47:c9:9e:5c:c6:c6:42:d9:49:
+                    6f:12:28:5d:3c:3d:65:d8:1e:9b:51:02:16:fa:fd:
+                    df:23:49:9b:ca:41:bd:cb:3a:aa:45:cb:09:e8:61:
+                    72:81:4b:b8:b3:db:9f:9d:a4:bc:d4:ba:88:b7:a5:
+                    20:f9:9f:69:20:7b:3a:e4:64:cc:a9:28:d0:26:bf:
+                    d5:e0:23:05:51:70:a1:55:29:6c:3e:77:00:43:30:
+                    0c:2e:23:6a:81:9f:7b:fb:30:5e:41:e2:42:a3:6f:
+                    24:d6:c7:e9:55:7a:87:dc:6f:86:5e:5a:e9:75:ef:
+                    a3:5a:ea:2f:36:0e:19:75:5f:52:a9:8d:5d:56:e2:
+                    a0:48:7e:4c:8c:26:76:98:bf:a0:08:33:15:b5:d3:
+                    9a:a8:b0:df:78:e1:2a:73:f2:26:55:c4:ea:d4:a0:
+                    8b:94:f9:a6:60:74:c6:82:9c:fa:24:4d:62:33:56:
+                    1f:30:14:bd:5f:e1:e1:9f:7a:ae:c1:93:e8:fe:b9:
+                    5c:bb:6c:bd:6d:c8:37:99:c9:44:68:d6:79:e9:33:
+                    fe:32:f1:4e:d2:6e:06:63:02:a6:e8:f9:23:1a:d4:
+                    90:d3:20:d3:d5:aa:3d:7b:64:a7:a0:46:8e:8b:a4:
+                    ba:c7:da:df:87:23:f3:47:0e:a9:c3:a9:c6:6b:39:
+                    0d:62:67:54:df:f9:0f:9c:aa:49:32:0f:1a:c7:b9:
+                    46:d4:e1:7d:75:c2:e7:42:d7:2a:b6:e5:a0:e5:37:
+                    da:93:69:ad:03:54:c6:e9:09:ea:fa:de:39:94:e3:
+                    d7:75:4e:be:1b:22:4a:b6:69:6e:ee:ab:12:c3:c7:
+                    b5:17:2e:4e:75:f7:5f:f3:ee:c7:95:ee:61:a2:5f:
+                    8d:b0:1f:6e:2b:99:e1:f4:d8:02:cd:ee:13:4f:e1:
+                    db:00:44:c3:9b:29:1b:4c:23:fd:99:47:32:6e:94:
+                    54:ab:74:ea:ba:95:0d:e1:fa:54:c8:10:37:b4:37:
+                    c7:93:c8:92:f4:0e:05:5a:c2:5d:98:e2:e8:a4:ef:
+                    d7:8d:67:76:de:1a:d3:50:98:7c:5c:ee:1a:8d:ff:
+                    7b:80:68:21:14:28:1d:d5:9e:89:23:e4:05:ba:4e:
+                    10:a7:5b:34:aa:cf:b3:5b:8c:69:4d:16:e5:d0:3b:
+                    68:b1:40:8d:19:50:25:08:c8:ac:b5:86:a5:cb:4c:
+                    1f:05:74:8a:69:d2:fd:fa:80:1f:7d:ae:c8:74:d8:
+                    4b:cf:cf:60:d5:a7:07:59:5d:6d:5a:7d:50:d4:5d:
+                    54:c9:17:a7:23:e1:58:8e:d4:4a:1d:37:03:fc:67:
+                    37:4e:91:76:2f:33:cd:cc:f1:c9:2f:85:58:b1:4b:
+                    2b:f4:eb:a5:3c:a4:9c:ec:e1:61:1e:13:1d:85:3b:
+                    de:71:6e:86:b1:29:5b:21:57:25:9f:cb:aa:70:19:
+                    3d:a6:fa:55:cb:cc:34:cd:52:3b:b5:87:67:ae:4a:
+                    70:b0:0a:82:2e:61:fe:7f:c7:c8:6e:bc:2d:22:86:
+                    50:50:48:54:b2:ae:ba:a9:2f:6e:c0:ec:f3:98:20:
+                    31:81:5c:ec:e6:be:92:fb:ae:17:fc:e1:45:cd:a1:
+                    ae:66:99:b0:4a:31:2b:49:64:fe:83:ca:37:c0:36:
+                    d2:75:b3:b7:26:90:bb:f6:23:7a:37:82:ef:c5:87:
+                    11:90:62:21:a0:a4:a0:8c:22:68:6c:79:b7:07:de:
+                    fa:9c:e9:5f:56:0f:a8:e9:62:be:f9:ee:47:27:af:
+                    5a:40:03:98:b2:93:f6:87:99:8d:10:8f:62:f7:a1:
+                    7a:99:ad:0b:99:4e:15:a0:27:e2:03:f4:a8:a3:ce:
+                    3c:c5:76:e6:f6:6c:c6:09:55:ca:b2:a8:01:db:2a:
+                    86:98:90:2a:ba:88:9e:ba:d0:ac:51:7f:78:cb:ce:
+                    5f:9f
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                9E:20:12:B4:24:8E:EF:49:A5:77:06:7A:7E:D8:4D:95:65:CC:67:20
+            X509v3 Authority Key Identifier: 
+                3D:32:CA:37:D2:10:F9:50:86:56:0C:A3:71:F0:63:75:25:7C:AD:65
+    Signature Algorithm: sha256WithRSAEncryption
+    Signature Value:
+        4c:b9:da:f5:1a:2c:f1:b2:d8:3a:8f:6f:57:5b:37:1f:f9:f3:
+        a0:00:70:81:80:60:0c:2c:f2:4d:26:6f:58:28:f0:eb:b7:4c:
+        91:7e:8f:dd:98:d9:64:69:af:91:5d:5e:1e:11:c8:09:d6:dd:
+        7c:ae:85:c9:da:82:fe:f4:06:15:e5:e0:f5:88:55:d1:d6:7e:
+        04:10:5d:af:dc:35:04:3a:b2:ba:25:97:56:03:ea:33:f5:d1:
+        d5:86:c0:b7:eb:07:fe:94:e0:80:05:ca:c9:53:ff:69:04:dd:
+        1e:64:1a:08:6d:23:96:39:69:68:12:9d:76:b4:50:8f:65:eb:
+        18:b5:ac:9d:61:f2:17:ea:36:98:b1:33:47:1f:49:5d:e2:54:
+        a3:39:70:b4:55:02:07:c4:45:d7:89:c5:b9:d3:de:85:6b:87:
+        92:b8:b9:8e:90:10:3f:62:d2:46:07:5f:4a:f0:e5:7f:b1:1e:
+        57:0b:ab:6b:71:f3:19:ca:fa:57:3d:c1:e5:b6:7a:f0:d7:70:
+        10:e2:7c:84:9b:57:17:9c:43:a9:e3:23:86:ff:ca:e5:4e:b3:
+        cf:5c:d0:8e:5e:b9:d9:e9:51:4e:f0:fd:10:0e:30:f3:17:8e:
+        84:f9:d6:be:59:89:6e:f0:57:ed:17:64:83:b4:45:2a:37:0e:
+        40:ac:85:e3:97:e3:49:19:a7:78:1d:c2:be:1e:b1:16:ac:f6:
+        be:d0:d0:b0:1b:17:c3:2c:5a:d8:73:6c:3e:90:9a:8c:33:48:
+        5b:6e:87:bc:b1:48:c9:a9:72:ff:14:4f:f0:ea:4d:00:71:d1:
+        8a:39:4f:cd:e2:a1:f7:aa:de:7b:20:7e:cb:cc:50:b5:4e:5c:
+        f4:16:70:2a:89:51:51:de:cd:4c:26:a0:e8:53:aa:c4:30:cb:
+        13:7b:c9:3d:7d:48:43:be:c0:ae:c1:99:7b:66:21:35:e1:c9:
+        1b:7c:ed:68:e1:ab:d1:5e:7a:c0:83:64:4a:25:6a:b0:13:4d:
+        45:25:6b:35:bf:02:4b:58:bd:a3:83:ad:a4:84:cf:80:3a:fe:
+        c2:69:50:8e:89:27:7a:cc:fa:54:0e:e2:8d:ad:1c:8b:10:01:
+        ed:2b:ca:6a:9d:d3:88:99:1f:b5:33:af:62:36:31:ab:ab:c4:
+        64:09:58:57:a5:6c:2f:28:cf:5c:d0:de:5f:43:2c:a3:4b:08:
+        68:0c:ac:35:23:d8:d9:34:af:79:22:c7:fd:2c:9e:65:e5:e1:
+        2c:61:13:44:01:16:f9:d6:e5:db:ff:df:19:91:b4:c4:ab:95:
+        5b:7c:18:b1:fd:be:17:91:49:6a:51:02:f9:33:83:ad:f7:54:
+        84:b3:fd:43:ef:68:11:85
+-----BEGIN CERTIFICATE-----
+MIILdjCCCV6gAwIBAgICEA8wDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT
+MQswCQYDVQQIEwJERTETMBEGA1UEBxMKV2lsbWluZ3RvbjEnMCUGA1UEChMeVGhl
+IEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uMRowGAYDVQQLExFBcGFjaGUgVG9t
+Y2F0IFBNQzEeMBwGA1UEAxMVQXBhY2hlIFRvbWNhdCBUZXN0IENBMB4XDTI2MTEx
+MjE1MjQwOVoXDTI4MTExMTE1MjQwOVowgYcxCzAJBgNVBAYTAlVTMQswCQYDVQQI
+DAJERTETMBEGA1UEBwwKV2lsbWluZ3RvbjEnMCUGA1UECgweVGhlIEFwYWNoZSBT
+b2Z0d2FyZSBGb3VuZGF0aW9uMRowGAYDVQQLDBFBcGFjaGUgVG9tY2F0IFBNQzER
+MA8GA1UEAwwIdGVzdHVzZXIwggeyMAsGCWCGSAFlAwQDEgOCB6EABjWjl+MjjZJh
+cj/8wcq8ukrVUyBCZDENkWqGR5LG9hHhQOwuCC9UwvPcd+YGa/sTl7ur48ifleSj
+pzbuXBkg2lH6FjNup6IOu0wzVBPBzTI2vGjWQEHy2ZwqY8mwqISRzDzEkIkBHwVQ
+9BV8FbT72r6Cro6sNoONLquFDllW0aXgZ9FCNEflqrR7V5aIDl/+FXKRODIPfSy6
+JeQpr52pO20+SjpvjisT5lJ0azyDluxbWbdaQO/yhab5m3tKpmOkx0kLzqlEx4ow
+qMpvMXjXjvdhztnSRWvq3wjlnnWIUr377YLA5+lw0Im8O5WfCs26x4woldf9QOjz
+MCJXjxnTJqrSx2XjIJt4xIXi5fCnqi5cQLRvqPf1MkhGJfrGnAXsKq9Q9lhEZmVr
+pv2N62RfeWsE/PrlgxIaZ6TQGisSDFJIbJVOyzVs3ENZ+5RQ0RWL3hTxL+YOPRq0
+8/WG8fbjXpzlFWnOtZNopT5bBcLDlBVy5IhJ2JpmKO3a+MctfMpAV9yR783e7Jae
+hTFDScioMb2UdeTmm1dA/YX7qhBs0J/dmOg1eqFeav/pH2++wA74DusVpQUtrx2V
+/AhJ7lqMaDm3pCZq2s8Arux/sl579zPysnybD2pB35orElL1uL03eiRqyn4bT8yW
+qc3W9F0fl7eLSNN4nQAasM1C63NLYbyz4KrcvfdUoxyyBv0kHQwxz+3I3snt6xac
+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
+91SEs/1D72gRhQ==
+-----END CERTIFICATE-----
diff --git a/test/org/apache/tomcat/util/net/testuser-mldsa-65-key.pem 
b/test/org/apache/tomcat/util/net/testuser-mldsa-65-key.pem
new file mode 100644
index 0000000000..0176a6f3a2
--- /dev/null
+++ b/test/org/apache/tomcat/util/net/testuser-mldsa-65-key.pem
@@ -0,0 +1,88 @@
+-----BEGIN PRIVATE KEY-----
+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
+Qq+IKDQwibgB1jkkuBJerrbO
+-----END PRIVATE KEY-----


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to