I have an app in a tomcat server, and I'm trying to read a client certificate. It's the first time I work with SSL, so probably I am doing something wrong. I don't want client validation, I just need to read the certificate content and send it to a webservice for validation and info retrieval. The problem is that I am unable to read the certificate content.
I already created a keystore and self-signed certificate for the server. The user certificate is on the browser (The user certificate is a valid one, not self-signed). The ssl connector configuration in server.xml is:
If I try to get the cipher suite : , I get the value TLS_DHE_DSS_WITH_AES_128_CBC_SHA
But when I try to read the certificates with , I just get a null value.
I have googled a little, and I read things such as that an Apache server is needed to retrieve the certificate, and then send it to Tomcat server. Is the Apache server really needed, or is Tomcat enough? In any case, what should I do to read the client certificates?
The reason you get null is because the client was not authenticated. 'clientAuth = want' permits the client to connect without authentication. To require authentication, you must set 'clientAuth = true'.
The server must send a list of trusted certificate authorities to the client. It uses the truststore file for this purpose. Look at the tomcat configuration documentation for how to do this. Make sure that at least one of the CA certificates in the server's truststore matches the issuer of your client certificate.
If, for example, your server says it trusts Verisign, the client-side gui will only prompt you to choose amongst your certificates signed by Verisign. If your server sends nothing, your client won't even bother you, it will just fail the connection.