Me gustaría utilizar certificados de cliente SSL para autenticar usuarios que se conectan a tomcat6/7. Tengo Tomcat configurado correctamente, y los certificados que firmo con el certificado en el almacén de confianza que di a tomcat se están autenticando con éxito desde IE y Firefox.Certificados de cliente encadenados
También me gustaría encadenar certificados de cliente, porque quiero dar a los clientes la capacidad de administrar sus propios usuarios. Podría lograr esto emitiendo a un cliente un certificado de CA de administración inmediata que usarían para firmar certificados de usuario adicionales. Necesitaría el navegador del usuario para enviar el certificado del usuario, encadenado con la CA de administración (firmada por mi certificado raíz) para autenticar.
Estoy usando openssl, y he creado una CA raíz y una CA intermedia, y he usado la CA intermedia para firmar un certificado de hoja. He convertido los tres certificados en pkcs12 y pem, y utilicé keytool para importar el certificado raíz en un almacén de confianza para tomcat. openssl -verify verificará la hoja pkcs12 contra el certificado intermedio (y el intermedio verifica contra raíz). Pero no puedo obtener el certificado de hoja (pkcs12) para verificar contra el certificado raíz (pkcs12). Tampoco puedo obtener IE o Firefox para autenticarse con el certificado de hoja. IE me pedirá el certificado, pero no puede autenticarse (no se menciona la conexión o falla en el registro de tomcat). Firefox no solicita el certificado de hoja; simplemente no logra autenticarse.
Aquí es cómo intento de verificar la hoja contra la raíz usando openssl:
openssl verify -CAfile ..\root\Root.pem Leaf.pem
Éstos son los scripts que estoy usando para generar los tres certificados:
root.bat:
set name=Root
set keyPassword=dummypassword
set trustPassword=dummypassword
openssl genrsa -des3 -passout pass:%keyPassword% -out %name%.key 4096
openssl req -new -key %name%.key -passin pass:%keyPassword% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%"
openssl x509 -req -days 3650 -in %name%.csr -signkey %name%.key -passin pass:%keyPassword% -extfile GenerateCertificate.cfg -extensions v3_ca -out %name%.crt
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%keyPassword% -passout pass:%keyPassword% -out %name%.pkcs12
keytool -noprompt -import -file %name%.crt -alias %name% -keystore %name%.truststore -deststorepass %trustPassword%
keytool -list -v -keystore %name%.truststore -storepass %trustPassword% > %name%.truststore.dump.txt
keytool -exportcert -alias %name% -keystore %name%.truststore -storetype jks -storepass %trustPassword% -rfc -file %name%.truststore.pem
openssl pkcs12 -in %name%.pkcs12 -out %name%.pem -nodes -passin pass:%keyPassword%
intermediate.bat:
set name=Intermediate
set password=dummypassword
set caDir=../root
set caName=Root
set caPassword=dummypassword
openssl genrsa -des3 -passout pass:%password% -out %name%.key 2048
openssl req -new -key %name%.key -passin pass:%password% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%"
openssl x509 -req -days 3650 -in %name%.csr -CA %caDir%/%caName%.crt -CAkey %caDir%/%caName%.key -passin pass:%caPassword% -set_serial 1 -extfile GenerateCertificate.cfg -extensions v3_ca -out %name%.crt
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%password% -passout pass:%password% -chain -CAfile %caDir%/%caName%.crt -out %name%.pkcs12
openssl pkcs12 -in %name%.pkcs12 -out %name%.pem -nodes -passin pass:%password%
hoja .bat:
set name=Leaf
set password=dummypassword
set caDir=../intermediate
set caName=Intermediate
set caPassword=dummypassword
openssl genrsa -des3 -passout pass:%password% -out %name%.key 2048
openssl req -new -key %name%.key -passin pass:%password% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%"
openssl x509 -req -days 3650 -in %name%.csr -CA %caDir%/%caName%.crt -CAkey %caDir%/%caName%.key -passin pass:%caPassword% -set_serial 1 -out %name%.crt
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%password% -passout pass:%password% -chain -CAfile %caDir%/%caName%.pem -out %name%.pkcs12
openssl pkcs12 -in %name%.pkcs12 -out %name%.pem -nodes -passin pass:%password%
GenerateCertificate.cfg:
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = CA:true,pathlen:3