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

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

commit 48c49a0ef73fb6271fb9f33e0a3208d0f95bfde9
Author: Dimitris Soumis <[email protected]>
AuthorDate: Thu Oct 9 20:48:10 2025 +0300

    Ehnance tests and fix various issues in TestOcspIntegration tests
---
 .../tomcat/util/net/ocsp/TestOcspIntegration.java  | 289 ++++++++-------------
 test/org/apache/tomcat/util/net/ocsp/ca-cert.pem   |  34 +--
 .../tomcat/util/net/ocsp/client-keystore.p12       | Bin 0 -> 3658 bytes
 .../apache/tomcat/util/net/ocsp/client-password    |   1 +
 .../util/net/ocsp/generate-ocsp-test-artifacts.sh  |  48 +++-
 .../tomcat/util/net/ocsp/ocsp-client-good.der      | Bin 0 -> 1280 bytes
 .../tomcat/util/net/ocsp/ocsp-client-revoked.der   | Bin 0 -> 1302 bytes
 test/org/apache/tomcat/util/net/ocsp/ocsp-good.der | Bin 1280 -> 1280 bytes
 .../apache/tomcat/util/net/ocsp/ocsp-revoked.der   | Bin 1302 -> 1302 bytes
 .../apache/tomcat/util/net/ocsp/server-cert.pem    | 106 ++++----
 .../org/apache/tomcat/util/net/ocsp/server-key.pem |  52 ++--
 .../org/apache/tomcat/util/net/ocsp/trustStore.p12 | Bin 1174 -> 1174 bytes
 12 files changed, 244 insertions(+), 286 deletions(-)

diff --git a/test/org/apache/tomcat/util/net/ocsp/TestOcspIntegration.java 
b/test/org/apache/tomcat/util/net/ocsp/TestOcspIntegration.java
index 487f6762e6..f4190d8eae 100644
--- a/test/org/apache/tomcat/util/net/ocsp/TestOcspIntegration.java
+++ b/test/org/apache/tomcat/util/net/ocsp/TestOcspIntegration.java
@@ -21,11 +21,9 @@ import java.io.Closeable;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
-import java.net.Socket;
 import java.net.URI;
 import java.net.URL;
 import java.nio.file.Files;
@@ -53,6 +51,7 @@ import java.util.Set;
 
 import javax.net.ssl.CertPathTrustManagerParameters;
 import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLHandshakeException;
 import javax.net.ssl.SSLSocketFactory;
@@ -77,13 +76,12 @@ import org.apache.tomcat.util.net.Constants;
 import org.apache.tomcat.util.net.SSLHostConfig;
 import org.apache.tomcat.util.net.SSLHostConfigCertificate;
 import org.apache.tomcat.util.net.TesterSupport;
-import org.apache.tomcat.util.net.openssl.OpenSSLConf;
-import org.apache.tomcat.util.net.openssl.OpenSSLConfCmd;
 import org.apache.tomcat.util.net.openssl.OpenSSLImplementation;
 
 import com.sun.net.httpserver.Headers;
 import com.sun.net.httpserver.HttpServer;
 
+
 @RunWith(Parameterized.class)
 public class TestOcspIntegration extends TomcatBaseTest {
     private static final String CA_CERTIFICATE_PATH = "ca-cert.pem";
@@ -92,9 +90,13 @@ public class TestOcspIntegration extends TomcatBaseTest {
     private static final String TRUSTSTORE_PATH = "trustStore.p12";
     private static final String TRUSTSTORE_PASS = "trust-password";
     private static final String KEYSTORE_TYPE = "PKCS12";
-    private static final String OCSP_GOOD_RESPONSE = "ocsp-good.der";
-    private static final String OCSP_REVOKED_RESPONSE = "ocsp-revoked.der";
-    @Parameterized.Parameters(name = "{0}")
+    private static final String OCSP_SERVER_CERT_GOOD_RESPONSE = 
"ocsp-good.der";
+    private static final String OCSP_SERVER_CERT_REVOKED_RESPONSE = 
"ocsp-revoked.der";
+    private static final String CLIENT_KEYSTORE_PATH = "client-keystore.p12";
+    private static final String CLIENT_KEYSTORE_PASS = "client-password";
+    private static final String OCSP_CLIENT_CERT_GOOD_RESPONSE = 
"ocsp-client-good.der";
+    private static final String OCSP_CLIENT_CERT_REVOKED_RESPONSE = 
"ocsp-client-revoked.der";
+    @Parameterized.Parameters(name = "useFFM: {0}")
     public static Collection<Object[]> parameters() {
         List<Object[]> parameterSets = new ArrayList<>();
         parameterSets.add(new Object[] { Boolean.FALSE });
@@ -107,135 +109,111 @@ public class TestOcspIntegration extends TomcatBaseTest 
{
     @Before
     public void runtimeCheck() {
         if (ffm) {
-            Assume.assumeTrue(JreCompat.isJre22Available());
+            Assume.assumeTrue("FFM is not available.", 
JreCompat.isJre22Available());
         }
     }
 
     @Test
-    public void testOcspGood() throws Exception {
-        Assert.assertEquals(HttpServletResponse.SC_OK, 
testOCSP(OCSP_GOOD_RESPONSE, false, false, ffm));
+    public void testOcspGood_ClientVerifiesServerCertificateOnly() throws 
Exception {
+        Assert.assertEquals(HttpServletResponse.SC_OK, 
testOCSP(OCSP_SERVER_CERT_GOOD_RESPONSE, false, true, ffm));
+    }
+    @Test
+    public void testOcspGood_Mutual() throws Exception {
+        final int ocspResponderPortForClient = 8889;
+        Assume.assumeTrue("Port " + ocspResponderPortForClient + " is not 
available.", isPortAvailable(ocspResponderPortForClient));
+        try (FakeOcspResponder fakeOcspResponder = new 
FakeOcspResponder(Files.readAllBytes(new 
File(getPath(OCSP_CLIENT_CERT_GOOD_RESPONSE)).toPath()), 
ocspResponderPortForClient)){
+            fakeOcspResponder.start();
+            Assert.assertEquals(HttpServletResponse.SC_OK, 
testOCSP(OCSP_SERVER_CERT_GOOD_RESPONSE, true, true, ffm));
+        }
+    }
+    @Test
+    public void testOcspGood_ServerVerifiesClientCertificateOnly() throws 
Exception {
+        final int ocspResponderPortForClient = 8889;
+        Assume.assumeTrue("Port " + ocspResponderPortForClient + " is not 
available.", isPortAvailable(ocspResponderPortForClient));
+        try (FakeOcspResponder fakeOcspResponder = new 
FakeOcspResponder(Files.readAllBytes(new 
File(getPath(OCSP_CLIENT_CERT_GOOD_RESPONSE)).toPath()), 
ocspResponderPortForClient)){
+            fakeOcspResponder.start();
+            Assert.assertEquals(HttpServletResponse.SC_OK, 
testOCSP(OCSP_SERVER_CERT_REVOKED_RESPONSE, true, false, ffm));
+        }
     }
     @Test(expected = CertificateRevokedException.class)
-    public void testOcspRevoked() throws Exception {
+    public void testOcspRevoked_ClientVerifiesServerCertificateOnly() throws 
Exception {
         try {
-            testOCSP(OCSP_REVOKED_RESPONSE, false, false, ffm);
+            testOCSP(OCSP_SERVER_CERT_REVOKED_RESPONSE, false, true, ffm);
         }catch (SSLHandshakeException sslHandshakeException) {
-            if (sslHandshakeException.getCause().getCause() instanceof 
CertPathValidatorException cpe) {
-                Assert.assertEquals("REVOKED", cpe.getReason().toString());
-                Assert.assertTrue(cpe.toString().contains("reason: 
KEY_COMPROMISE"));
-                // Some JDKs only expose CertPathValidatorException
-                if (cpe.getCause() instanceof CertificateRevokedException) {
-                    throw (CertificateRevokedException) cpe.getCause();
-                } else {
-                    throw new CertificateRevokedException(new Date(), 
CRLReason.KEY_COMPROMISE, new X500Principal(""), new HashMap<>());
-                }
-            }
+            handleExceptionWhenRevoked(sslHandshakeException);
         }
     }
-    @Test
-    public void testOcspNoCheck() throws Exception {
-        Assert.assertEquals(HttpServletResponse.SC_OK, 
testOCSP(OCSP_REVOKED_RESPONSE, false, true, ffm));
-    }
-    @Test
-    public void testOcspNoCheck_01() throws Exception {
-        Assume.assumeTrue(isSslConfCtxNewAvailable());
-        Assert.assertEquals(HttpServletResponse.SC_OK, 
testOCSP(OCSP_REVOKED_RESPONSE, true, true, ffm));
+    @Test(expected = CertificateRevokedException.class)
+    public void testOcspRevoked_Mutual() throws Exception {
+        try {
+            // The exception is thrown before server side verification, while 
client does OCSP verification.
+            testOCSP(OCSP_SERVER_CERT_REVOKED_RESPONSE, true, true, ffm);
+        }catch (SSLHandshakeException sslHandshakeException) {
+            handleExceptionWhenRevoked(sslHandshakeException);
+        }
     }
     @Test(expected = SSLHandshakeException.class)
-    public void testOcspNoCheck_02() throws Exception {
-        Assume.assumeTrue(isSslConfCtxNewAvailable());
-        testOCSP(OCSP_REVOKED_RESPONSE, true, false, ffm);
+    public void testOcspRevoked_ServerVerifiesClientCertificateOnly() throws 
Exception {
+        final int ocspResponderPortForClient = 8889;
+        Assume.assumeTrue("Port " + ocspResponderPortForClient + " is not 
available.", isPortAvailable(ocspResponderPortForClient));
+        try (FakeOcspResponder fakeOcspResponder = new 
FakeOcspResponder(Files.readAllBytes(new 
File(getPath(OCSP_CLIENT_CERT_REVOKED_RESPONSE)).toPath()), 
ocspResponderPortForClient)){
+            fakeOcspResponder.start();
+            testOCSP(OCSP_SERVER_CERT_GOOD_RESPONSE, true, false, ffm);
+        }
     }
     @Test
-    public void testOcspNoCheck_03() throws Exception {
-        Assert.assertEquals(HttpServletResponse.SC_OK, 
testOCSP(OCSP_REVOKED_RESPONSE, false, true, ffm));
+    public void testOcsp_NoVerification() throws Exception {
+        final int ocspResponderPortForClient = 8889;
+        Assume.assumeTrue("Port " + ocspResponderPortForClient + " is not 
available.", isPortAvailable(ocspResponderPortForClient));
+        try (FakeOcspResponder fakeOcspResponder = new 
FakeOcspResponder(Files.readAllBytes(new 
File(getPath(OCSP_CLIENT_CERT_REVOKED_RESPONSE)).toPath()), 
ocspResponderPortForClient)){
+            fakeOcspResponder.start();
+            Assert.assertEquals(HttpServletResponse.SC_OK, 
testOCSP(OCSP_SERVER_CERT_REVOKED_RESPONSE, false, false, ffm));
+        }
     }
     @Test
     public void testOcspResponderUrlDiscoveryViaCertificateAIA() throws 
Exception {
         final int ocspPort = 8888;
-        Assume.assumeTrue(isPortAvailable(ocspPort));
-        Assert.assertEquals(HttpServletResponse.SC_OK, 
testOCSP(OCSP_GOOD_RESPONSE, false, false, ffm,
-                true, "127.0.0.1", ocspPort));
+        Assume.assumeTrue("Port " + ocspPort + " is not available.", 
isPortAvailable(ocspPort));
+        Assert.assertEquals(HttpServletResponse.SC_OK, 
testOCSP(OCSP_SERVER_CERT_GOOD_RESPONSE, false, true, ffm,
+                true, ocspPort));
     }
-    //This test is a reference to CVE-2017-15698 of tomcat-native
-    @Test
-    public void testOcspWithLongResponderUrlViaProxy() throws Exception {
-        final int ocspPort = 8889;
-        Assume.assumeTrue(isPortAvailable(ocspPort));
-        StringBuilder longHostname = new StringBuilder();
-        longHostname.append("a".repeat(128));
-
-        String originalProxyHost = System.getProperty("http.proxyHost");
-        String originalProxyPort = System.getProperty("http.proxyPort");
-
-        try (ForwardingProxy proxy = new ForwardingProxy("127.0.0.1", 
ocspPort)) {
-            Thread proxyThread = new Thread(proxy);
-            proxyThread.start();
-            System.setProperty("http.proxyHost", "127.0.0.1");
-            System.setProperty("http.proxyPort", 
String.valueOf(proxy.getPort()));
-            try {
-                testOCSP(OCSP_REVOKED_RESPONSE, false, false, ffm,
-                        false, longHostname.toString(), ocspPort);
-                Assert.fail("Should have thrown an exception");
-            } catch (SSLHandshakeException sslHandshakeException) {
-                Assert.assertTrue(true);
-            }
-        } finally {
-            if (originalProxyHost == null) {
-                System.clearProperty("http.proxyHost");
-            } else {
-                System.setProperty("http.proxyHost", originalProxyHost);
-            }
-            if (originalProxyPort == null) {
-                System.clearProperty("http.proxyPort");
-            } else {
-                System.setProperty("http.proxyPort", originalProxyPort);
-            }
-        }
+    private int testOCSP(String pathToOcspResponse, boolean 
serverSideVerificationEnabled, boolean clientSideOcspVerificationEnabled, 
boolean ffm) throws Exception {
+        return testOCSP(pathToOcspResponse, serverSideVerificationEnabled, 
clientSideOcspVerificationEnabled, ffm,
+            false, 0);
     }
-    private int testOCSP(String pathToOcspResponse, boolean 
serverSideOcspVerificationDisabled, boolean clientSideOcspVerificationDisabled, 
boolean ffm) throws Exception {
-        return testOCSP(pathToOcspResponse, 
serverSideOcspVerificationDisabled, clientSideOcspVerificationDisabled, ffm,
-                false, "127.0.0.1", 0);
-    }
-    private int testOCSP(String pathToOcspResponse, boolean 
serverSideOcspVerificationDisabled, boolean clientSideOcspVerificationDisabled, 
boolean ffm,
-                        boolean discoverResponderFromAIA, String 
ocspResponderHostname, int ocspResponderPort) throws Exception {
+    private int testOCSP(String pathToOcspResponse, boolean 
serverSideVerificationEnabled, boolean clientSideOcspVerificationEnabled, 
boolean ffm,
+                         boolean clientDiscoversResponderFromAIA, int 
ocspResponderPort) throws Exception {
         File certificateFile = new File(getPath(SERVER_CERTIFICATE_PATH));
         File certificateKeyFile = new 
File(getPath(SERVER_CERTIFICATE_KEY_PATH));
         File certificateChainFile = new File(getPath(CA_CERTIFICATE_PATH));
         Tomcat tomcat = getTomcatInstance();
-        initSsl(tomcat, certificateFile, certificateKeyFile, 
certificateChainFile);
+        initSsl(tomcat, serverSideVerificationEnabled, certificateFile, 
certificateKeyFile, certificateChainFile);
         TesterSupport.configureSSLImplementation(tomcat,
                 ffm ? 
"org.apache.tomcat.util.net.openssl.panama.OpenSSLImplementation" : 
OpenSSLImplementation.class.getName(),
                 true);
-        if (serverSideOcspVerificationDisabled) {
-            SSLHostConfig sslHostConfig = 
tomcat.getConnector().findSslHostConfigs()[0];
-            OpenSSLConf conf = new OpenSSLConf();
-            OpenSSLConfCmd cmd = new OpenSSLConfCmd();
-            cmd.setName("NO_OCSP_CHECK");
-            cmd.setValue("true");
-            conf.addCmd(cmd);
-            sslHostConfig.setOpenSslConf(conf);
-        }
 
         Context context = tomcat.addContext("", null);
         Tomcat.addServlet(context, "simple", new 
TesterSupport.SimpleServlet());
         context.addServletMappingDecoded("/", "simple");
 
-        KeyStore trustStorePath = KeyStore.getInstance(KEYSTORE_TYPE);
+        KeyStore trustStore = KeyStore.getInstance(KEYSTORE_TYPE);
         String trustStorePass = Files.readString(new 
File(getPath(TRUSTSTORE_PASS)).toPath()).trim();
-        trustStorePath.load(new FileInputStream(new 
File(getPath(TRUSTSTORE_PATH)).getAbsolutePath()), 
trustStorePass.toCharArray());
+        trustStore.load(new FileInputStream(new 
File(getPath(TRUSTSTORE_PATH)).getAbsolutePath()), 
trustStorePass.toCharArray());
+        KeyStore clientKeystore = KeyStore.getInstance(KEYSTORE_TYPE);
+        String clientKeystorePass = Files.readString(new 
File(getPath(CLIENT_KEYSTORE_PASS)).toPath()).trim();
+        clientKeystore.load(new FileInputStream(new 
File(getPath(CLIENT_KEYSTORE_PATH)).getAbsolutePath()), 
clientKeystorePass.toCharArray());
         byte[] ocspResponse = Files.readAllBytes(new 
File(getPath(pathToOcspResponse)).toPath());
-        try (FakeOcspResponder fakeOcspResponder = new 
FakeOcspResponder(ocspResponse, ocspResponderHostname, ocspResponderPort)) {
+        try (FakeOcspResponder fakeOcspResponder = new 
FakeOcspResponder(ocspResponse, ocspResponderPort)) {
             fakeOcspResponder.start();
             tomcat.start();
 
             URL url = new URI("https://127.0.0.1:"; + getPort() + "/").toURL();
             HttpsURLConnection connection = (HttpsURLConnection) 
url.openConnection();
             SSLSocketFactory sslSocketFactory;
-            if (clientSideOcspVerificationDisabled) {
-                sslSocketFactory = 
buildClientSslSocketFactoryNoOcsp(trustStorePath);
+            if (clientSideOcspVerificationEnabled) {
+                sslSocketFactory = 
buildClientSslSocketFactoryWithOcsp(clientDiscoversResponderFromAIA ? null : 
fakeOcspResponder.url(), trustStore, clientKeystore, clientKeystorePass);
             } else {
-                sslSocketFactory = 
buildClientSslSocketFactoryWithOcsp(discoverResponderFromAIA ? null : 
fakeOcspResponder.url(), trustStorePath);
+                sslSocketFactory = 
buildClientSslSocketFactoryNoOcsp(trustStore, clientKeystore, 
clientKeystorePass);
             }
             connection.setSSLSocketFactory(sslSocketFactory);
             connection.connect();
@@ -245,21 +223,29 @@ public class TestOcspIntegration extends TomcatBaseTest {
         }
     }
 
-    private static void initSsl(Tomcat tomcat, File certificateFile, File 
certificateKeyFile, File certificateChainFile) {
+    private static void initSsl(Tomcat tomcat, boolean 
serverSideVerificationEnabled, File certificateFile, File certificateKeyFile, 
File certificateChainFile) {
         Connector connector = tomcat.getConnector();
         connector.setSecure(true);
-        Assert.assertTrue(connector.setProperty("SSLEnabled", "true"));
+        connector.setProperty("SSLEnabled", "true");
 
         SSLHostConfig sslHostConfig = new SSLHostConfig();
         SSLHostConfigCertificate certificate = new 
SSLHostConfigCertificate(sslHostConfig, 
SSLHostConfigCertificate.Type.UNDEFINED);
         sslHostConfig.addCertificate(certificate);
-        connector.addSslHostConfig(sslHostConfig);
         certificate.setCertificateFile(certificateFile.getAbsolutePath());
         
certificate.setCertificateKeyFile(certificateKeyFile.getAbsolutePath());
         
certificate.setCertificateChainFile(certificateChainFile.getAbsolutePath());
+        if (serverSideVerificationEnabled) {
+            sslHostConfig.setCertificateVerification("required");
+        } else {
+            sslHostConfig.setCertificateVerification("optionalNoCA");
+        }
+        
sslHostConfig.setCaCertificateFile(certificateChainFile.getAbsolutePath());
+        connector.addSslHostConfig(sslHostConfig);
     }
 
-    private static SSLSocketFactory buildClientSslSocketFactoryWithOcsp(String 
ocspUrl, KeyStore trustStore) throws Exception {
+    private static SSLSocketFactory buildClientSslSocketFactoryWithOcsp(String 
ocspUrl, KeyStore trustStore, KeyStore clientKeystore, String 
clientKeystorePass) throws Exception {
+        KeyManagerFactory kmf = 
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+        kmf.init(clientKeystore, clientKeystorePass.toCharArray());
         Set<TrustAnchor> trustAnchors = 
getTrustAnchorsFromKeystore(trustStore);
         PKIXRevocationChecker revocationChecker =(PKIXRevocationChecker) 
CertPathValidator.getInstance("PKIX").getRevocationChecker();
         if (ocspUrl != null) {
@@ -272,21 +258,23 @@ public class TestOcspIntegration extends TomcatBaseTest {
 
         TrustManagerFactory trustManagerFactory = 
TrustManagerFactory.getInstance("PKIX");
         trustManagerFactory.init(new CertPathTrustManagerParameters(pkix));
-        return initSSLContext(trustManagerFactory).getSocketFactory();
+        return initSSLContext(kmf, trustManagerFactory).getSocketFactory();
     }
-    private static SSLSocketFactory buildClientSslSocketFactoryNoOcsp(KeyStore 
trustStore) throws Exception {
+    private static SSLSocketFactory buildClientSslSocketFactoryNoOcsp(KeyStore 
trustStore, KeyStore clientKeystore, String clientKeystorePass) throws 
Exception {
+        KeyManagerFactory kmf = 
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+        kmf.init(clientKeystore, clientKeystorePass.toCharArray());
         TrustManagerFactory trustManagerFactory = 
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
         trustManagerFactory.init(trustStore);
-        return initSSLContext(trustManagerFactory).getSocketFactory();
+        return initSSLContext(kmf, trustManagerFactory).getSocketFactory();
     }
-    private static SSLContext initSSLContext(TrustManagerFactory 
trustManagerFactory) throws Exception {
+    private static SSLContext initSSLContext(KeyManagerFactory 
keyManagerFactory, TrustManagerFactory trustManagerFactory) throws Exception {
         SSLContext sslContext;
         if (TesterSupport.isTlsv13Available()) {
             sslContext = SSLContext.getInstance(Constants.SSL_PROTO_TLSv1_3);
         } else {
             sslContext = SSLContext.getInstance(Constants.SSL_PROTO_TLSv1_2);
         }
-        sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
+        sslContext.init(keyManagerFactory.getKeyManagers(), 
trustManagerFactory.getTrustManagers(), null);
         return sslContext;
     }
     private static Set<TrustAnchor> getTrustAnchorsFromKeystore(KeyStore 
keyStore) throws KeyStoreException {
@@ -301,16 +289,26 @@ public class TestOcspIntegration extends TomcatBaseTest {
         }
         return trustAnchors;
     }
+    private static void handleExceptionWhenRevoked(Exception exception) throws 
Exception {
+        if (exception.getCause().getCause() instanceof 
CertPathValidatorException cpe) {
+            Assert.assertEquals("REVOKED", cpe.getReason().toString());
+            Assert.assertTrue(cpe.toString().contains("reason: 
KEY_COMPROMISE"));
+            // Some JDKs only expose CertPathValidatorException
+            if (cpe.getCause() instanceof CertificateRevokedException) {
+                throw (CertificateRevokedException) cpe.getCause();
+            } else {
+                throw new CertificateRevokedException(new Date(), 
CRLReason.KEY_COMPROMISE, new X500Principal(""), new HashMap<>());
+            }
+        }
+    }
 
     private static class FakeOcspResponder implements Closeable {
         private final byte[] ocspResponse;
         private HttpServer server;
         private int port;
-        private final String hostname;
 
-        FakeOcspResponder(byte[] ocspResponse, String hostname, int port) {
+        FakeOcspResponder(byte[] ocspResponse, int port) {
             this.ocspResponse = ocspResponse;
-            this.hostname = hostname;
             this.port = port;
         }
 
@@ -330,7 +328,7 @@ public class TestOcspIntegration extends TomcatBaseTest {
         }
 
         String url() {
-            return "http://"; + hostname + ":" + port + "/ocsp";
+            return "http://127.0.0.1:"; + port + "/ocsp";
         }
         @Override public void close() {
             if (server != null) {
@@ -338,69 +336,6 @@ public class TestOcspIntegration extends TomcatBaseTest {
             }
         }
     }
-    private static class ForwardingProxy implements Closeable, Runnable {
-        private final ServerSocket serverSocket;
-        private final String targetHost;
-        private final int targetPort;
-        private volatile boolean running = true;
-
-        ForwardingProxy(String targetHost, int targetPort) throws IOException {
-            this.serverSocket = new ServerSocket(0);
-            this.targetHost = targetHost;
-            this.targetPort = targetPort;
-        }
-
-        public int getPort() {
-            return serverSocket.getLocalPort();
-        }
-
-        @Override
-        public void close() throws IOException {
-            running = false;
-            serverSocket.close();
-        }
-
-        @Override
-        public void run() {
-            try {
-                while (running) {
-                    try (Socket clientSocket = serverSocket.accept();
-                            Socket targetSocket = new Socket(targetHost, 
targetPort)) {
-
-                        Thread clientToTarget = new Thread(() -> {
-                            try {
-                                transfer(clientSocket.getInputStream(), 
targetSocket.getOutputStream());
-                            } catch (IOException ignored) {}
-                        });
-
-                        Thread targetToClient = new Thread(() -> {
-                            try {
-                                transfer(targetSocket.getInputStream(), 
clientSocket.getOutputStream());
-                            } catch (IOException ignored) {}
-                        });
-
-                        clientToTarget.start();
-                        targetToClient.start();
-                        clientToTarget.join();
-                        targetToClient.join();
-
-                    } catch (IOException | InterruptedException ignored) {}
-                }
-            } finally {
-                try {
-                    close();
-                } catch (IOException ignored) {}
-            }
-        }
-
-        private void transfer(InputStream in, OutputStream out) throws 
IOException {
-            byte[] buffer = new byte[4096];
-            int read;
-            while ((read = in.read(buffer)) != -1) {
-                out.write(buffer, 0, read);
-            }
-        }
-    }
 
     private String getPath(String file) throws IOException {
         if (file == null) {
@@ -421,16 +356,4 @@ public class TestOcspIntegration extends TomcatBaseTest {
             return false;
         }
     }
-    private boolean isSslConfCtxNewAvailable() {
-        if (!ffm) {
-            return true;
-        }
-        try {
-            
Class.forName("org.apache.tomcat.util.openssl.openssl_h$SSL_CONF_CTX_new");
-            return true;
-        } catch (UnsatisfiedLinkError | NoClassDefFoundError | 
ClassNotFoundException | ExceptionInInitializerError e) {
-            // This is the expected error on systems with an incompatible 
library (like LibreSSL).
-            return false;
-        }
-    }
 }
diff --git a/test/org/apache/tomcat/util/net/ocsp/ca-cert.pem 
b/test/org/apache/tomcat/util/net/ocsp/ca-cert.pem
index 868d96b85c..34d31d9595 100644
--- a/test/org/apache/tomcat/util/net/ocsp/ca-cert.pem
+++ b/test/org/apache/tomcat/util/net/ocsp/ca-cert.pem
@@ -1,19 +1,19 @@
 -----BEGIN CERTIFICATE-----
-MIIDFTCCAf2gAwIBAgIUE+fRcl8KYHYGys95XRSRV9kPoY4wDQYJKoZIhvcNAQEL
-BQAwEjEQMA4GA1UEAwwHVGVzdCBDQTAeFw0yNTEwMDYxODA5MzdaFw0zNTEwMDQx
-ODA5MzdaMBIxEDAOBgNVBAMMB1Rlc3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQC08HmXABNhVfcJzkj1f0aYwXg78ZMl1wAX5fGO0/x4S6Fe3O5P
-Ktzh78IewHMZuTZCrSvc+2fTI9uV8vwxxzgxJHFKwXCGinIXkIGAvLuD4WrxTY2Y
-InnSnlh+U2ThCmdbLRxv+BPofRVWfvu1P17ihhZxNQX0rdA7SS8VM4hPRMvSeIa6
-bm1WZZ7I+xNGV5bJ91zG23Vf4TOB4ArMhH03nTgF31yK/Wx1mS2PQrSdMVEsQfpw
-Axsgb4GpAmpsNf20bmmYTa+s1p/kZCpZIjfDNfNrMKVwDsnaLbDdhr7iPaRJZXRf
-tVsoLGAr63zdYMxTFmov0kxidiuR2eGO8eXnAgMBAAGjYzBhMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRH8IgYod1fwuchneeQJYr4
-zAyXBzAfBgNVHSMEGDAWgBRH8IgYod1fwuchneeQJYr4zAyXBzANBgkqhkiG9w0B
-AQsFAAOCAQEAdfmf8rIjMbEji5uVUJLrEySi/xqIW1QVdErPJQdn7O2XWzuzMjgE
-as6aiBOmHLZRB03vnpVIEPkDYy0VRyPpuQM/BRClTh7pkl0B+zPn8/LnrJbPxIH2
-2Y8V/8ZAG3GZL4E7hciDuySOA1aRMeh1pum4Nkdb110RGsJw6ZpiAFYorVEhW90e
-1IHjqETYW108MEd+ODUsPki8rs1+JSe+mlfpQx5u/KZ7sZARhk6Mycfr3Gsv6iDv
-8mElWMn/qy/gbwc1sxsXs+HLZL5EP6n1Lp/Qn01+m3IDPpYOTVkiSCv/K8JS4BR4
-9r0AKHWj3iJbVLvkCrVJQJ/ibTXN6FFzlw==
+MIIDFTCCAf2gAwIBAgIUAyOAYMldD+vXvTMjdb9wXBFMQhQwDQYJKoZIhvcNAQEL
+BQAwEjEQMA4GA1UEAwwHVGVzdCBDQTAeFw0yNTEwMDkxNzUwMTlaFw0zNTEwMDcx
+NzUwMTlaMBIxEDAOBgNVBAMMB1Rlc3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQCR5uGEWWQ5x9WNSDB/38SAT30PR+DxhNL4v+sjx9u2yARgVI9q
+ENLoXCrQUxMocRvwdb30owOe/vxJPaCrNQunUfSQpeKW9KYPj9tCWxrc/LPeciqO
+m+XTgxowDbAY7gBGSUM75vsv0CBMo2fSGDEmQqB3+guCQBHmvV4iTnctN6jg6e1t
+p+Xq4VwoTLaLMuI+G+pBvv+xVk+Mkw0L+wRChsqegaxq740V0FNfBeId4nYLAWrT
+WRKmmkhrfRm2DQJ+gG46RGb1jA+3y3i+nTkEzn9ZmzAGpF3PIVhrPzYbC7AByE+T
+2NqtHHp37jBvuChr20ReY+Gzx0zUdkQcF/vlAgMBAAGjYzBhMA8GA1UdEwEB/wQF
+MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTI+niWdI2AaIVg+4CTF2g6
+prb8qDAfBgNVHSMEGDAWgBTI+niWdI2AaIVg+4CTF2g6prb8qDANBgkqhkiG9w0B
+AQsFAAOCAQEAKKXD005JJTCSuQckD856ZzVa6ffoGMSssSOlqvS7KrpiUID/twvG
+/r8SEXbguRGauyh0FY9UlbNeWjN8u92v7zILmnBUdYm7sPEi6+bTFDrjJ22rFxei
+Xpwb02WY9P+Kty96DTjByrKfodtGt9Ey+R/fsBE0dNEKgqOu9H+6nVcxjO2bONJH
+QJsHEn3liLj+DpHn5Pe4laQHuPpXSZgvtjL5/Y8D6G4UCNQ7gVxq8GCDK1eQuyKM
+oboDINCN8/6XUmCuLk51urHcsZXOJ7PX8VirdPWBqpjGa2hMNsIak6NAyK86rDFP
+brZOqWk1hfVTbW9LlIxkU7dQniz/PKFxgw==
 -----END CERTIFICATE-----
diff --git a/test/org/apache/tomcat/util/net/ocsp/client-keystore.p12 
b/test/org/apache/tomcat/util/net/ocsp/client-keystore.p12
new file mode 100644
index 0000000000..f763d243e8
Binary files /dev/null and 
b/test/org/apache/tomcat/util/net/ocsp/client-keystore.p12 differ
diff --git a/test/org/apache/tomcat/util/net/ocsp/client-password 
b/test/org/apache/tomcat/util/net/ocsp/client-password
new file mode 100644
index 0000000000..1d40192aeb
--- /dev/null
+++ b/test/org/apache/tomcat/util/net/ocsp/client-password
@@ -0,0 +1 @@
+changeit
diff --git 
a/test/org/apache/tomcat/util/net/ocsp/generate-ocsp-test-artifacts.sh 
b/test/org/apache/tomcat/util/net/ocsp/generate-ocsp-test-artifacts.sh
index bfde3bfcbf..7b8fd5c76d 100755
--- a/test/org/apache/tomcat/util/net/ocsp/generate-ocsp-test-artifacts.sh
+++ b/test/org/apache/tomcat/util/net/ocsp/generate-ocsp-test-artifacts.sh
@@ -56,7 +56,7 @@ default_md        = sha256
 policy            = policy_loose
 copy_extensions   = copy
 private_key       = $dir/private/ca.key.pem
-certificate       = $dir/certs/ca.cert.pem
+certificate       = $dir/certs/ca-cert.pem
 
 [ policy_loose ]
 commonName        = supplied
@@ -77,6 +77,13 @@ subjectAltName   = @san
 IP.1 = 127.0.0.1
 DNS.1 = localhost
 
+[ v3_client ]
+basicConstraints = critical,CA:FALSE
+keyUsage         = critical,digitalSignature,keyEncipherment
+extendedKeyUsage = clientAuth
+# Make the AIA field >127 bytes to test CVE-2017-15698
+authorityInfoAccess = 
OCSP;URI:http://127.0.0.1:8889/ocsp/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
 [ v3_ocsp ]
 basicConstraints = critical,CA:FALSE
 keyUsage         = critical,digitalSignature
@@ -88,7 +95,7 @@ cd "$WORK_DIR" || (printf "Something went wrong.\r\n" && exit)
 
 printf "Generating CA key and certificate...\r\n"
 openssl genrsa -out private/ca.key.pem 2048
-openssl req -x509 -new -nodes -key private/ca.key.pem -days 3650 -subj 
"/CN=Test CA" -config openssl.cnf -extensions v3_ca -out certs/ca.cert.pem
+openssl req -x509 -new -nodes -key private/ca.key.pem -days 3650 -subj 
"/CN=Test CA" -config openssl.cnf -extensions v3_ca -out certs/ca-cert.pem
 printf "Done.\r\n"
 
 printf "Generating server key and certificate...\r\n"
@@ -104,11 +111,11 @@ openssl ca -batch -config openssl.cnf -extensions v3_ocsp 
-in ocsp.csr.pem -out
 printf "Done.\r\n"
 
 printf "Building OCSP request for the server certificate...\r\n"
-openssl ocsp -issuer certs/ca.cert.pem -cert certs/server.cert.pem -no_nonce 
-reqout request.der
+openssl ocsp -issuer certs/ca-cert.pem -cert certs/server.cert.pem -no_nonce 
-reqout request.der
 printf "Done.\r\n"
 
 printf "Answering request with good status (ocsp-good.der)...\r\n"
-openssl ocsp -index index -CA certs/ca.cert.pem -rsigner certs/ocsp.cert.pem 
-rkey private/ocsp.key.pem -no_nonce -ndays 365 -reqin request.der -respout 
../ocsp-good.der
+openssl ocsp -index index -CA certs/ca-cert.pem -rsigner certs/ocsp.cert.pem 
-rkey private/ocsp.key.pem -no_nonce -ndays 365 -reqin request.der -respout 
../ocsp-good.der
 printf "Done.\r\n"
 
 printf "Revoking the server certificate in the CA database...\r\n"
@@ -116,17 +123,44 @@ openssl ca -config openssl.cnf -revoke 
certs/server.cert.pem -crl_reason keyComp
 printf "Done.\r\n"
 
 printf "Answering request with REVOKED status (ocsp-revoked.der)...\r\n"
-openssl ocsp -index index -CA certs/ca.cert.pem -rsigner certs/ocsp.cert.pem 
-rkey private/ocsp.key.pem -no_nonce -ndays 365 -reqin request.der -respout 
../ocsp-revoked.der
+openssl ocsp -index index -CA certs/ca-cert.pem -rsigner certs/ocsp.cert.pem 
-rkey private/ocsp.key.pem -no_nonce -ndays 365 -reqin request.der -respout 
../ocsp-revoked.der
 printf "Done.\r\n"
 
-cp certs/ca.cert.pem ../ca-cert.pem
+cp certs/ca-cert.pem ..
 cp private/server.key.pem ../server-key.pem
 cp certs/server.cert.pem ../server-cert.pem
 
 printf "Creating PKCS12 client's truststore (trustStore.p12) with the 
CA...\r\n"
 rm -f ../trustStore.p12
 echo "$PASS" > ../trust-password
-keytool -importcert -alias ocsp-ca -file certs/ca.cert.pem -keystore 
../trustStore.p12 -storetype PKCS12 -storepass "$PASS" -noprompt
+keytool -importcert -alias ocsp-ca -file certs/ca-cert.pem -keystore 
../trustStore.p12 -storetype PKCS12 -storepass "$PASS" -noprompt
+printf "Done.\r\n"
+
+printf "Generating client key and certificate...\r\n"
+openssl genrsa -out private/client.key.pem 2048
+openssl req -new -key private/client.key.pem -out client.csr.pem -subj 
"/CN=test-client"
+openssl ca -batch -config openssl.cnf -extensions v3_client -in client.csr.pem 
-out certs/client.cert.pem -days 365
+printf "Done.\r\n"
+
+printf "Building OCSP request for the CLIENT certificate...\r\n"
+openssl ocsp -issuer certs/ca-cert.pem -cert certs/client.cert.pem -no_nonce 
-reqout client-request.der
+printf "Done.\r\n"
+
+printf "Answering request with good status for client 
(ocsp-client-good.der)...\r\n"
+openssl ocsp -index index -CA certs/ca-cert.pem -rsigner certs/ocsp.cert.pem 
-rkey private/ocsp.key.pem -no_nonce -ndays 365 -reqin client-request.der 
-respout ../ocsp-client-good.der
+printf "Done.\r\n"
+
+printf "Revoking the client certificate in the CA database...\r\n"
+openssl ca -config openssl.cnf -revoke certs/client.cert.pem -crl_reason 
keyCompromise
+printf "Done.\r\n"
+
+printf "Answering request with REVOKED status for client 
(ocsp-client-revoked.der)...\r\n"
+openssl ocsp -index index -CA certs/ca-cert.pem -rsigner certs/ocsp.cert.pem 
-rkey private/ocsp.key.pem -no_nonce -ndays 365 -reqin client-request.der 
-respout ../ocsp-client-revoked.der
+printf "Done.\r\n"
+
+printf "Creating PKCS12 client keystore for mutual TLS...\r\n"
+echo "$PASS" > ../client-password
+openssl pkcs12 -export -name ocsp-client -out ../client-keystore.p12 -inkey 
private/client.key.pem -in certs/client.cert.pem -certfile certs/ca-cert.pem 
-passout pass:"$PASS"
 printf "Done.\r\n"
 
 printf "\r\nOptional verification:\r\n"
diff --git a/test/org/apache/tomcat/util/net/ocsp/ocsp-client-good.der 
b/test/org/apache/tomcat/util/net/ocsp/ocsp-client-good.der
new file mode 100644
index 0000000000..1194788bff
Binary files /dev/null and 
b/test/org/apache/tomcat/util/net/ocsp/ocsp-client-good.der differ
diff --git a/test/org/apache/tomcat/util/net/ocsp/ocsp-client-revoked.der 
b/test/org/apache/tomcat/util/net/ocsp/ocsp-client-revoked.der
new file mode 100644
index 0000000000..55676882c0
Binary files /dev/null and 
b/test/org/apache/tomcat/util/net/ocsp/ocsp-client-revoked.der differ
diff --git a/test/org/apache/tomcat/util/net/ocsp/ocsp-good.der 
b/test/org/apache/tomcat/util/net/ocsp/ocsp-good.der
index ad00418349..b4f2dadaa0 100644
Binary files a/test/org/apache/tomcat/util/net/ocsp/ocsp-good.der and 
b/test/org/apache/tomcat/util/net/ocsp/ocsp-good.der differ
diff --git a/test/org/apache/tomcat/util/net/ocsp/ocsp-revoked.der 
b/test/org/apache/tomcat/util/net/ocsp/ocsp-revoked.der
index f8e28dc2bc..f0b7c51a17 100644
Binary files a/test/org/apache/tomcat/util/net/ocsp/ocsp-revoked.der and 
b/test/org/apache/tomcat/util/net/ocsp/ocsp-revoked.der differ
diff --git a/test/org/apache/tomcat/util/net/ocsp/server-cert.pem 
b/test/org/apache/tomcat/util/net/ocsp/server-cert.pem
index 5fafe64727..7f7097bc4d 100644
--- a/test/org/apache/tomcat/util/net/ocsp/server-cert.pem
+++ b/test/org/apache/tomcat/util/net/ocsp/server-cert.pem
@@ -5,31 +5,31 @@ Certificate:
         Signature Algorithm: sha256WithRSAEncryption
         Issuer: CN=Test CA
         Validity
-            Not Before: Oct  6 18:09:37 2025 GMT
-            Not After : Oct  6 18:09:37 2026 GMT
+            Not Before: Oct  9 17:50:19 2025 GMT
+            Not After : Oct  9 17:50:19 2026 GMT
         Subject: CN=localhost
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:e6:13:ec:d0:11:cc:5e:32:43:94:a0:5f:c2:b7:
-                    9c:9b:f3:3c:33:55:8f:fd:48:28:71:b9:e4:6d:64:
-                    a9:62:3a:df:c8:35:a4:d6:5f:d4:08:0c:c1:9e:18:
-                    20:08:9c:0f:d4:2f:79:ab:34:ab:f7:4a:7c:ab:4b:
-                    38:6f:44:c3:93:a3:2e:2f:af:c9:a5:16:69:50:10:
-                    06:8c:96:34:15:5c:f9:98:06:a9:a6:6f:64:a2:8a:
-                    b2:3a:68:33:7a:34:42:72:a7:59:e7:59:9c:6c:fa:
-                    da:2e:18:d2:61:61:99:59:2f:bb:1a:64:9b:bd:9a:
-                    77:03:96:9b:9e:af:96:e2:3c:68:b1:fd:44:b8:86:
-                    3e:3e:ac:b0:f1:89:01:1f:6f:dc:ef:36:23:b3:3d:
-                    ca:97:9a:b8:ac:77:a7:7c:ee:23:6c:86:66:94:45:
-                    7f:fe:f2:c3:27:84:e1:4f:40:09:83:28:2c:d5:c3:
-                    ed:05:bc:30:eb:db:8d:74:1f:88:ac:e6:19:5b:a0:
-                    8d:b6:21:eb:72:84:3d:19:90:f8:26:ad:2c:13:ad:
-                    3c:a0:fd:c6:5d:49:9d:a1:33:2e:86:2c:c3:4d:7f:
-                    78:ce:aa:c6:30:36:f2:d8:4e:4d:f5:b5:21:27:e1:
-                    e1:71:a0:99:97:db:c4:d9:5f:f6:be:6c:28:70:2d:
-                    21:61
+                    00:b3:a6:2f:95:ec:a3:9f:18:df:92:02:2f:f6:d8:
+                    e5:90:0d:45:b7:9b:fb:2c:63:62:a0:5d:06:a2:c6:
+                    5a:38:d0:02:7e:bf:ae:22:05:5a:c9:83:e1:5f:7b:
+                    74:00:b6:7e:58:e2:1e:40:29:b1:5f:2c:3c:5a:c2:
+                    5a:04:bb:4e:0f:1a:ae:f0:bc:cb:16:49:c4:6a:59:
+                    2e:56:e7:73:e0:c1:01:72:b0:d5:a0:86:b0:f5:77:
+                    16:24:57:9b:51:24:97:af:bc:3a:2c:9f:c2:89:b0:
+                    cc:f2:d9:f9:1d:6d:25:90:2a:1a:36:3e:cb:8a:13:
+                    7c:e2:99:6d:7e:a1:ef:a8:36:b1:3b:75:36:14:88:
+                    3e:32:7b:c0:5a:55:ec:2c:9f:f8:32:f7:55:86:22:
+                    46:ea:ba:19:46:d0:e0:77:df:f3:95:d3:98:f8:62:
+                    1c:b7:fe:11:01:e7:bb:5d:82:d9:ee:32:44:9f:88:
+                    e1:7d:f9:20:83:02:f8:8d:4d:76:26:69:c7:b1:fd:
+                    82:7f:a9:c9:0a:8d:26:a4:18:05:ee:04:e9:61:04:
+                    9f:e5:80:cc:f4:d5:3d:f7:d3:ce:1f:00:27:b5:d1:
+                    09:b6:cb:93:36:b4:4c:58:e3:65:f6:85:4d:51:55:
+                    5f:25:01:35:b5:a7:5a:44:7f:0b:69:70:5d:8e:eb:
+                    ff:b9
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -43,44 +43,44 @@ Certificate:
             X509v3 Subject Alternative Name: 
                 IP Address:127.0.0.1, DNS:localhost
             X509v3 Subject Key Identifier: 
-                AF:63:43:43:2B:E3:A2:F8:1E:13:7D:23:E1:D7:35:3F:3F:E7:D7:83
+                F0:0D:29:83:76:05:84:3A:15:D1:D7:3D:7C:80:B1:A2:B9:B2:34:E9
             X509v3 Authority Key Identifier: 
-                47:F0:88:18:A1:DD:5F:C2:E7:21:9D:E7:90:25:8A:F8:CC:0C:97:07
+                C8:FA:78:96:74:8D:80:68:85:60:FB:80:93:17:68:3A:A6:B6:FC:A8
     Signature Algorithm: sha256WithRSAEncryption
     Signature Value:
-        83:2c:30:77:81:7e:0d:92:4f:f9:2e:76:1b:e0:8c:b7:f3:f6:
-        73:46:0a:86:0f:81:49:08:b4:86:88:48:71:1f:75:2b:15:8a:
-        97:4a:17:4e:35:7a:ff:5e:38:9b:d8:1e:88:69:42:e4:ba:33:
-        37:f1:c7:26:b1:04:52:2f:e9:6b:c3:51:ee:ad:c6:f2:ae:80:
-        e0:c3:a4:82:7a:90:2f:6c:80:d2:ab:8b:f4:33:a3:8b:d5:30:
-        ec:08:4f:6f:5a:94:ed:c3:36:a5:64:19:59:b3:7c:07:54:ab:
-        a9:f8:a2:a7:42:67:0a:37:9f:43:86:aa:63:07:c0:a2:b7:d3:
-        c1:30:f7:de:e8:74:72:57:f6:e7:da:b5:cb:ec:2d:58:58:f9:
-        fd:09:e9:6e:db:3d:76:3d:0e:2d:6c:63:13:f9:81:50:c1:5e:
-        1a:b4:d6:dc:e5:e7:ba:d0:83:7f:c9:ef:84:de:86:a4:6c:0a:
-        40:df:16:80:3d:28:72:56:3a:3f:d7:02:58:93:05:78:2a:7c:
-        2b:cd:5b:4f:0c:ce:96:40:e1:4a:ae:d9:9c:74:34:bc:16:1f:
-        73:45:af:d6:4a:ef:6b:97:3e:0f:8e:d4:4b:50:7e:1a:7a:ac:
-        07:20:ed:5a:78:16:13:ab:c6:84:b6:e4:09:0b:51:b1:a9:4f:
-        16:f6:34:67
+        55:20:97:f2:f9:44:63:65:50:f5:a2:92:99:d2:ef:90:1b:97:
+        aa:0d:3a:bb:6f:a1:d1:dd:99:64:86:f0:ba:f2:12:61:b6:c4:
+        22:20:f1:5b:b4:8c:19:68:57:18:a4:63:47:52:e9:2e:d1:68:
+        b2:de:da:02:a8:4f:8f:ec:c1:d4:f7:e4:69:09:25:de:d2:60:
+        5f:bf:e9:fe:12:74:ae:f1:25:59:04:53:e1:a3:3c:b9:c2:99:
+        91:78:3d:79:a3:29:f9:3a:5b:59:32:b1:2c:c3:f0:3f:c2:49:
+        14:36:b9:3e:c5:3f:47:1c:14:bc:da:4f:39:2d:e1:16:f6:a6:
+        c7:fa:f4:b8:bb:95:d9:49:b7:0b:51:ae:9b:67:b6:01:c2:30:
+        aa:db:17:21:6f:64:cd:2d:ff:ea:9a:ce:4a:a7:44:f5:8f:a7:
+        b5:f8:87:48:bf:03:8e:3e:ab:8e:44:e7:a6:64:9a:f2:06:5a:
+        33:21:e1:01:8c:bf:c7:61:36:90:e4:5f:b6:e7:26:55:9e:44:
+        7c:d8:52:75:f9:1b:df:7a:ef:ea:b1:a3:08:19:ae:e1:39:42:
+        ec:d2:ad:dc:63:a8:f4:54:db:8d:9f:12:ea:fe:94:cf:af:eb:
+        88:66:bb:3c:cf:a9:a3:5e:4a:c5:09:94:f8:4e:03:a2:01:a1:
+        e5:24:92:eb
 -----BEGIN CERTIFICATE-----
 MIIDbTCCAlWgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UEAwwHVGVz
-dCBDQTAeFw0yNTEwMDYxODA5MzdaFw0yNjEwMDYxODA5MzdaMBQxEjAQBgNVBAMM
-CWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOYT7NAR
-zF4yQ5SgX8K3nJvzPDNVj/1IKHG55G1kqWI638g1pNZf1AgMwZ4YIAicD9Qveas0
-q/dKfKtLOG9Ew5OjLi+vyaUWaVAQBoyWNBVc+ZgGqaZvZKKKsjpoM3o0QnKnWedZ
-nGz62i4Y0mFhmVkvuxpkm72adwOWm56vluI8aLH9RLiGPj6ssPGJAR9v3O82I7M9
-ypeauKx3p3zuI2yGZpRFf/7ywyeE4U9ACYMoLNXD7QW8MOvbjXQfiKzmGVugjbYh
-63KEPRmQ+CatLBOtPKD9xl1JnaEzLoYsw01/eM6qxjA28thOTfW1ISfh4XGgmZfb
-xNlf9r5sKHAtIWECAwEAAaOByjCBxzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQE
+dCBDQTAeFw0yNTEwMDkxNzUwMTlaFw0yNjEwMDkxNzUwMTlaMBQxEjAQBgNVBAMM
+CWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALOmL5Xs
+o58Y35ICL/bY5ZANRbeb+yxjYqBdBqLGWjjQAn6/riIFWsmD4V97dAC2fljiHkAp
+sV8sPFrCWgS7Tg8arvC8yxZJxGpZLlbnc+DBAXKw1aCGsPV3FiRXm1Ekl6+8Oiyf
+womwzPLZ+R1tJZAqGjY+y4oTfOKZbX6h76g2sTt1NhSIPjJ7wFpV7Cyf+DL3VYYi
+Ruq6GUbQ4Hff85XTmPhiHLf+EQHnu12C2e4yRJ+I4X35IIMC+I1NdiZpx7H9gn+p
+yQqNJqQYBe4E6WEEn+WAzPTVPffTzh8AJ7XRCbbLkza0TFjjZfaFTVFVXyUBNbWn
+WkR/C2lwXY7r/7kCAwEAAaOByjCBxzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQE
 AwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATA2BggrBgEFBQcBAQQqMCgwJgYIKwYB
 BQUHMAGGGmh0dHA6Ly8xMjcuMC4wLjE6ODg4OC9vY3NwMBoGA1UdEQQTMBGHBH8A
-AAGCCWxvY2FsaG9zdDAdBgNVHQ4EFgQUr2NDQyvjovgeE30j4dc1Pz/n14MwHwYD
-VR0jBBgwFoAUR/CIGKHdX8LnIZ3nkCWK+MwMlwcwDQYJKoZIhvcNAQELBQADggEB
-AIMsMHeBfg2ST/kudhvgjLfz9nNGCoYPgUkItIaISHEfdSsVipdKF041ev9eOJvY
-HohpQuS6MzfxxyaxBFIv6WvDUe6txvKugODDpIJ6kC9sgNKri/Qzo4vVMOwIT29a
-lO3DNqVkGVmzfAdUq6n4oqdCZwo3n0OGqmMHwKK308Ew997odHJX9ufatcvsLVhY
-+f0J6W7bPXY9Di1sYxP5gVDBXhq01tzl57rQg3/J74TehqRsCkDfFoA9KHJWOj/X
-AliTBXgqfCvNW08MzpZA4Uqu2Zx0NLwWH3NFr9ZK72uXPg+O1EtQfhp6rAcg7Vp4
-FhOrxoS25AkLUbGpTxb2NGc=
+AAGCCWxvY2FsaG9zdDAdBgNVHQ4EFgQU8A0pg3YFhDoV0dc9fICxormyNOkwHwYD
+VR0jBBgwFoAUyPp4lnSNgGiFYPuAkxdoOqa2/KgwDQYJKoZIhvcNAQELBQADggEB
+AFUgl/L5RGNlUPWikpnS75Abl6oNOrtvodHdmWSG8LryEmG2xCIg8Vu0jBloVxik
+Y0dS6S7RaLLe2gKoT4/swdT35GkJJd7SYF+/6f4SdK7xJVkEU+GjPLnCmZF4PXmj
+Kfk6W1kysSzD8D/CSRQ2uT7FP0ccFLzaTzkt4Rb2psf69Li7ldlJtwtRrptntgHC
+MKrbFyFvZM0t/+qazkqnRPWPp7X4h0i/A44+q45E56ZkmvIGWjMh4QGMv8dhNpDk
+X7bnJlWeRHzYUnX5G9967+qxowgZruE5QuzSrdxjqPRU242fEur+lM+v64hmuzzP
+qaNeSsUJlPhOA6IBoeUkkus=
 -----END CERTIFICATE-----
diff --git a/test/org/apache/tomcat/util/net/ocsp/server-key.pem 
b/test/org/apache/tomcat/util/net/ocsp/server-key.pem
index 9ae76c0640..1a63661cef 100644
--- a/test/org/apache/tomcat/util/net/ocsp/server-key.pem
+++ b/test/org/apache/tomcat/util/net/ocsp/server-key.pem
@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDmE+zQEcxeMkOU
-oF/Ct5yb8zwzVY/9SChxueRtZKliOt/INaTWX9QIDMGeGCAInA/UL3mrNKv3Snyr
-SzhvRMOToy4vr8mlFmlQEAaMljQVXPmYBqmmb2SiirI6aDN6NEJyp1nnWZxs+tou
-GNJhYZlZL7saZJu9mncDlpuer5biPGix/US4hj4+rLDxiQEfb9zvNiOzPcqXmris
-d6d87iNshmaURX/+8sMnhOFPQAmDKCzVw+0FvDDr2410H4is5hlboI22IetyhD0Z
-kPgmrSwTrTyg/cZdSZ2hMy6GLMNNf3jOqsYwNvLYTk31tSEn4eFxoJmX28TZX/a+
-bChwLSFhAgMBAAECggEAMKHaDuIQOYH05HvgufMfNJydpzkpAi/oMp/JL7FVF2kb
-58ElClY/poLxwyXU0ZURSHfPhzePOOqC/x8bevOFRpX5u4U0AYQC9zQn+jv+ntxj
-+rU/02kc07mu8icX6HcW647Bs2Pu61870n4XLBPZ+u7apPnKrLFzgivp0YlKgp+9
-JSVH+hiTNS3t7ujvB3msmBFe0SrYBZfh623aUniPaH2mwogt6Ii5nty8kT0RvqZZ
-+xYm3F5xSbObaalF21fAAzFf9byT4wfLLej/ewO4vIb3r5cfi/XWLa5BFS5918Vl
-ugWrNk26EOYsA+8iHAlF9rJfTuBy2lnIdE3P9ToRBQKBgQDzMUF8ZOq9sLpq+UJm
-ShysL0/IuXpzqwa4IJGIAEREEv3x6yDTFTmSfijvXMC4dRAfk59ODo69BYtMuqIh
-WFThb2SKxJUj8+kS8OxtPt015qls7hb/NZT1kkaerwee1CTVZccyk4FOft3hM3Gv
-9ZZZqiIl8CaUB/+k4I9/K92kJQKBgQDyMdt1sfYO5uEW4YPyKtCQCtUl3ifLNhNA
-Stps0fS5QbhoKi+q5jprIFYqsNlS/c1OghFdnW2TYxadrwWnAFegwIuCj3Kb9BcE
-2lprxoyQkoWwprZ37e85/sYSfb3e5XLpdcDHZgJ2JGf59WZTv/vosHwSh0ZtEj+B
-4+Gsd8EFjQKBgQCkhyRYtiWh49ia2ruzXFx9mRyPHfzcGE7Zbx9GNXf53idz7bEt
-XWSv2S50kfnIUVpxInxaYLrs4r1VUcaybIIwah5JS6niwvdiWyB44FjkSINDMOja
-DDQU17tzS9MJ/1hUDyFu9CA9LNOLsjQt6SaoztN/ezN+XtLzhwFN9i1jCQKBgQDM
-8ZWUvZfKumJke0atCL/d89y0I44m7kZSFEVK6kuc7FkAhBo8EoACoKVpkKcGDFDM
-C1Jolkvf+Wxs2Gr/C1IbbHNhcsN35pAIAkGbi7Lsr6BDgH9NcuEJgWbYxOCDmkOn
-/IW59b9Fe78kjB0f54hiOd1zzFay+0sUPeJ8kAWdDQKBgGd5VQHSJIYU+eH/jceO
-AynVdbO5RqI2J7XSRNQNbevc9657qQ++9ws2r73pSVOx9GhuN7pSworNhpw7SACt
-0vNkWFM/GaQZZTwxVP7bmKcqxZUOAdw5zpVuXVKgn8YJfja+kYa28ohUZ7PTBAXh
-cSer5Nnjs7kgD3axyGKoyNeB
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCzpi+V7KOfGN+S
+Ai/22OWQDUW3m/ssY2KgXQaixlo40AJ+v64iBVrJg+Ffe3QAtn5Y4h5AKbFfLDxa
+wloEu04PGq7wvMsWScRqWS5W53PgwQFysNWghrD1dxYkV5tRJJevvDosn8KJsMzy
+2fkdbSWQKho2PsuKE3zimW1+oe+oNrE7dTYUiD4ye8BaVewsn/gy91WGIkbquhlG
+0OB33/OV05j4Yhy3/hEB57tdgtnuMkSfiOF9+SCDAviNTXYmacex/YJ/qckKjSak
+GAXuBOlhBJ/lgMz01T33084fACe10Qm2y5M2tExY42X2hU1RVV8lATW1p1pEfwtp
+cF2O6/+5AgMBAAECggEABdjR0apbBPGVTTY/A2S5y/9ylnBAM4ikjB2a+q9D/nde
+rWtlqnvMIaTmL+pfsyo9YH0ziNkSictxx25t6ZuDBeDTcshiP7504xU1+eQclGMT
+vfzdZxUbK1IN6W7kgjaTrUeOCSfF+B9F/F11yyxjPZbxNXTDwSGzPdjKhIWWvD3F
+T0xUHKm+XKHWmEveporOmH1M6wxVfZ8NbAqWYRhFaUp+GZwjv2M+trXdyDmlNPWQ
+k66FdZNM+Roa2nGVcgXDdue/+Xah5eNrNzIm7ilodBQzS7Z5ADYVFktyBTGfRCs3
+Uc2BUGZrVZSRu10DybZo+0XE7HLgdMzlTxTax65hBQKBgQD8ltIYCRBzbRn7EC9O
+tbmyKCutxUCNe8t5cLm6iFTILOR2DZSsQH8cav0uGNMgXo0oHvY2H49xw5DqfSy2
+jcVhIKXoDKvHOrU7Ph/attIvyTTizprupAEi7dnZGf0sENQBR1BuSRMGv4B8hYKL
+51PfkspTBtsaZZhDAjJlYjYZVwKBgQC2EzfFeNKF9IZ4Gfexsrvj84Y8S3kfkxzT
+jZkT+JZFRDhNCA7tORZJcriQnitK1M2dA0L1xNFQH+5mVLnn2YwZMgWGYWWKNfD9
+r/oS7yVy9qr3yf5i+XHk/Dr4LvDsyYlGuRLVfLltcggj5g84JTYabvVzo6j5ss/3
+VVbzMIg1bwKBgQDjDTP31RYLm/Pxwf+0chhldESnJJu9Up16IYFikrAbbHdFQzn0
+iNl6ExZY/Im0HCoo+YP67O3FprU6g6DQzKmzgGSCLfmv0i8c/OAne5V+zRAUHQIa
+KCS5YDMmO31fwhTAvXkoWdmXhEccJ+tMlXnIjCwA7DXCCbcP7QaeKeVVawKBgQCw
+HPCiOpbvaTE0NHHo2OhyuhgKdDpJd0O3wUvjDF1VzIHkyLmfbcuH6cZqZAOeEy57
+BC+dh+2qYeh35NYZU8z2hfLgI49S25Ap4jCyZc1EYSHIIgLEe2FWSz9C1izF7L6y
+wMtd4pF9MoJ7Lslj1mJ5uQAEBbapJ/OO2mYLPtNRUwKBgQCC4aV+boMhDfvYpAir
+PTk+od7rBBcBZnV2dnqz4BHl7cfZCzD2GmJesgBLEBuf3r3sMGov3tItLkCteCqt
+cc3vwC+tNCpz8INLUMCR8i64J4ZgrwUgUbmt+myoAIDx/46GVGsknvuzSabLRH3h
+L9eCqiIiXCbiXjWw4vDfkXqdIA==
 -----END PRIVATE KEY-----
diff --git a/test/org/apache/tomcat/util/net/ocsp/trustStore.p12 
b/test/org/apache/tomcat/util/net/ocsp/trustStore.p12
index 62d6a603cf..5b66a7d8d8 100644
Binary files a/test/org/apache/tomcat/util/net/ocsp/trustStore.p12 and 
b/test/org/apache/tomcat/util/net/ocsp/trustStore.p12 differ


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


Reply via email to