I finally got a solution to my problem, so I will post the results here if anyone gets stuck.
Thanks to Michael Martin Michael Software Thoughts and Ramblings I found that:
keytool uses the DSA algorithm by default when generating a self-signed certificate. Earlier versions of Firefox accepted these keys without a problem. With Firefox 3 beta 5, using DSA does not work, but using RSA does. Passing "-keyalg RSA" when generating a self-signed certificate creates a certified Firefox 3 beta 5 fully accepts.
I just set this flag, cleared all the caches in FireFox, and it worked like a charm! I use this as a test setup for my project, and I need to share it with other people, so I wrote a small batch of script that creates two SSL certificates. You can add Tomcat to the program, and another .p12 file, which can be imported into FireFox / IE. Thank!
Usage: The first command line argument is the client username. All passwords are a "password" (without quotes). Modify any of the hard-coded bits to suit your needs.
@echo off if "%1" == "" goto usage keytool -genkeypair -alias servercert -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -keystore server.jks -storepass password keytool -genkeypair -alias %1 -keystore %1.p12 -storetype pkcs12 -keyalg RSA -dname "CN=%1,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -storepass password keytool -exportcert -alias %1 -file %1.cer -keystore %1.p12 -storetype pkcs12 -storepass password keytool -importcert -keystore server.jks -alias %1 -file %1.cer -v -trustcacerts -noprompt -storepass password keytool -list -v -keystore server.jks -storepass password del %1.cer goto end :usage echo Need user id as first argument: generate_keystore [username] goto end :end pause
Results consist of two files. One of them is called server.jks, which you drop into Tomcat and another file called {username} .p12, which you import into your browser. The server.jks file has a client certificate added as a trusted certificate.
I hope someone finds this helpful.
And here is the XML you need to add to your Tomcat conf / sever.xml file (tested only on Tomcat 6.x)
<Connector clientAuth="true" port="8443" minSpareThreads="5" maxSpareThreads="75" enableLookups="true" disableUploadTimeout="true" acceptCount="100" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" keystoreFile="${catalina.home}/conf/server.jks" keystoreType="JKS" keystorePass="password" truststoreFile="${catalina.home}/conf/server.jks" truststoreType="JKS" truststorePass="password" SSLVerifyClient="require" SSLEngine="on" SSLVerifyDepth="2" sslProtocol="TLS" />
For Tomcat 7:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" SSLEnabled="true" maxThreads="200" scheme="https" secure="true" keystoreFile="${catalina.base}/conf/server.jks" keystorePass="password" clientAuth="false" sslProtocol="TLS" />