Hello,

I'm setting up certificate client authentication on Tomcat 10.0.0
running on Java 16+36.  I'm having trouble getting it to work with a
CRL.  My SSL connector is:

    <Connector  
        protocol="org.apache.coyote.http11.Http11AprProtocol" 
        port="8443"
        SSLEnabled="true"
        maxParameterCount="1000"
        >
        <SSLHostConfig
            protocols="TLSv1.3"
            certificateVerification="optional"
            caCertificatePath="conf/ca-certs"
            certificateRevocationListPath="conf/ca-crls"
            >
            <Certificate 
                certificateKeyFile="conf/localhost-ec-key.pem"
                certificateFile="conf/localhost-ec-cert.pem"
                />
        </SSLHostConfig>
        <UpgradeProtocol 
            className="org.apache.coyote.http2.Http2Protocol"
            />
    </Connector>




In my PKI setup (using OpenSSL), I have a root CA
(cert: root-ca.pem), and a subordinate CA (cert: sub-ca-01.pem),
which signs leaf certificates, and issues a CRL (crl:
sub-ca-01-crl.pem).

File root-ca.pem is in conf/ca-certs.  File
sub-ca-01-crl.pem is in conf/ca-crls, as follows:


0551d8aa.r0 -> sub-ca-01-crl.pem
c79c8ddb.r0 -> sub-ca-01-crl.pem
sub-ca-01-crl.pem -> /home/me/somedir/sub-ca-01-crl.pem





Before adding to <SSLHostConfig>, attribute
«certificateRevocationListPath="conf/ca-crls"», client
authentication works fine.  The servlet can see a valid client
certificate and extract its attributes from the X509Certificate
object returned by
request.getAttribute("jakarta.servlet.request.X509Certificate").

However, once I add attribute
certificateRevocationListPath, the connector stops responding to
requests that present a client certificate regardless of whether the
certificate is valid or revoked —it still responds though if the
request does not present a client certificate.

Firefox only shows error NS_ERROR_FAILURE on the
"Transferred" column of the "Network" tab in
developer tools.

The CRL is not expired (and it won't be for long),
as its printout shows:

Certificate Revocation List (CRL):
        Version 2 (0x1)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = Sub CA 01
        Last Update: May  6 21:53:22 2025 GMT
        Next Update: Apr 12 21:53:22 2125 GMT
        CRL extensions:
            X509v3 CRL Number: 
                4097
Revoked Certificates:
    Serial Number: 82AB03509A91A8DCCBA0CE62A67417B6
        Revocation Date: May  6 21:51:40 2025 GMT
        CRL entry extensions:
            X509v3 CRL Reason Code: 
                Unspecified
    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:21:00:f7:98:07:1f:2f:cf:d5:ad:b7:5e:20:61:de:
         1b:7b:1f:c7:74:f9:80:33:d8:a2:cc:3a:75:28:4c:64:65:93:
         c1:02:20:5b:3e:e9:dd:52:9e:11:9b:45:5a:53:fc:2f:bb:b3:
         f4:db:52:64:f6:ea:13:54:43:d6:54:2b:f3:28:03:ae:6f





The problem persists if I drop attribute
certificateRevocationListPath, and replace it with
«certificateRevocationListFile="conf/ca-crls/sub-ca-01-crl.pem"».
 It persists as well if I add to  conf/ca-crls a CRL for the root CA.

I found nothing helpful in the logs.  The source
of the problem escapes me.  How can I get certificate client
authentication to work with CRLs in Tomcat?

Help is appreciated.  Thank you.

Reply via email to