2012-09-27 17 views
5

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 

Respuesta

5

El problema era que los certificados raíz e intermedios no fueron creados como certificados de CA.

Para crearlos como certificados CA, añadí

-extfile GenerateCertificate.cfg -extensions v3_ca 

a sus comandos de creación, y ha añadido el archivo GenerateCertificate.cfg a mis directorios de trabajo (que contenían los archivos por lotes creación cert).

He editado la publicación original para reflejar estos cambios.

Cuestiones relacionadas