Tomcat 10.x uses the jakarta versions of the API, and I believe all the attributes have been renamed:
"javax.servlet.request.X509Certificate" -> "jakarta.servlet.request.X509Certificate" Give that a quick try... On Tue, Feb 25, 2025 at 4:45 PM Chris Evans <chris.ev...@astrion.us> wrote: > > Hello, > > I need assistance with accessing client certificates from a servlet. This > is not a servlet code question but a configuration question. The call to: > request.getAttribute("javax.servlet.request.X509Certificate"); > > is not returning any certificates. The last time that I needed to do this > was Tomcat 7 and a lot has changed. > > When connecting with a browser, a trusted connection is established. > Javax.net.debug output shows my client certificate and a complete > chain have been accepted. > > I have also limited the TLS version to TSSv1.2. > > What have I missed? > > Thanks, > > Chris Evans > > OS: Ubuntu 22-04 > Tomcat Version: 10.1.36 > > TLS Logging: > env | grep OPT > CATALINA_OPTS=-Djavax.net.debug=ssl,handshake > > Connector Configuration: > > <Connector port="8443" > protocol="org.apache.coyote.http11.Http11Nio2Protocol" > > sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation" > maxParameterCount="1000" > scheme="https" > xmlValidation="true" > maxThreads="150" > SSLEnabled="true" > secure="true" > > > <SSLHostConfig > certificateVerificationDepth="4" > truststoreFile="/home/ubuntu/tomcat/-REDACTED-.jks" > truststorePassword="-REDACTED-" > protocols="TLSv1.2" > certificateVerification="required" > > > > <Certificate > certificateFile="/home/ubuntu/tomcat/serverCert.pem" > > certificateChainFile="/home/ubuntu/tomcat/serverChain.pem" > > certificateKeyFile="/home/ubuntu/tomcat/rsaKey.pem" > type="RSA" /> > </SSLHostConfig> > </Connector> > > Java: > @WebServlet("/hello") > public class HelloServlet extends HttpServlet { > @Override > protected void doGet(HttpServletRequest request, HttpServletResponse > response) > throws ServletException, IOException { > System.out.println("HelloServlet"); > response.setContentType("text/html"); > response.getWriter().println("<h1>Hello, World!</h1>"); > // Retrieve client certificate > X509Certificate[] certs = (X509Certificate[]) > request.getAttribute("javax.servlet.request.X509Certificate"); > > if (certs != null && certs.length > 0) { > response.getWriter().println("Client Cert Subject: " + > certs[0].getSubjectX500Principal()); > } else { > response.getWriter().println("No Client Certificate Found."); > } > > } > } > > WARNINGS: > javax.net.ssl|WARNING|21|https-jsse-nio2-8443-exec-2|2025-02-25 > 20:34:04.816 UTC|SSLExtensions.java:227|Ignore impact of unsupported > extension: server_name > javax.net.ssl|DEBUG|21|https-jsse-nio2-8443-exec-2|2025-02-25 20:34:04.817 > UTC|SSLExtensions.java:219|Ignore unavailable extension: max_fragment_length > javax.net.ssl|WARNING|21|https-jsse-nio2-8443-exec-2|2025-02-25 > 20:34:04.817 UTC|SSLExtensions.java:227|Ignore impact of unsupported > extension: status_request > javax.net.ssl|WARNING|21|https-jsse-nio2-8443-exec-2|2025-02-25 > 20:34:04.818 UTC|SSLExtensions.java:227|Ignore impact of unsupported > extension: supported_groups > javax.net.ssl|WARNING|21|https-jsse-nio2-8443-exec-2|2025-02-25 > 20:34:04.818 UTC|SSLExtensions.java:227|Ignore impact of unsupported > extension: ec_point_formats > javax.net.ssl|WARNING|21|https-jsse-nio2-8443-exec-2|2025-02-25 > 20:34:04.821 UTC|SSLExtensions.java:227|Ignore impact of unsupported > extension: application_layer_protocol_negotiation > javax.net.ssl|DEBUG|21|https-jsse-nio2-8443-exec-2|2025-02-25 20:34:04.821 > UTC|SSLExtensions.java:219|Ignore unavailable extension: status_request_v2 > javax.net.ssl|WARNING|21|https-jsse-nio2-8443-exec-2|2025-02-25 > 20:34:04.823 UTC|SSLExtensions.java:227|Ignore impact of unsupported > extension: extended_master_secret > > > PROPRIETARY INFORMATION. This email may contain proprietary and privileged > material for the sole use of the intended recipient. Any review or > distribution of such material by others is strictly prohibited. If you are > not the intended recipient please contact the sender and delete all copies. >