tipo servidor seguridad ruta puede instalar instalación crear configurar con claves certificados certificado cargar almacén agregar java tomcat ssl https keystore

java - servidor - no puede cargar almacén de claves de tipo jks con ruta



Certificado de almacén de claves HTTPS de Tomcat (3)

Ampliando el comentario de @Bozho,

Esto fue realmente crítico. "La clave y el certificado comprado deben estar bajo el mismo alias" .

El certificado SSL comprado en la CA (Verisign, Digicert, etc.) debe importarse con el mismo alias que la clave privada generada antes de crear el csr. Después de importar el certificado comprado en el almacén de claves utilizando java keytool, verá "Respuesta de certificado agregada al almacén de claves".

Para verificar la cadena de confianza, use el comando de terminal openssl s_client -connect yourdomain.com:443 -showcerts. Comienza en su certificado y lleva a una CA raíz de confianza.

Encontré otro problema con SSL y Tomcat: configuré un almacén de claves que contiene una clave y un certificado (el certificado del servidor que deseo presentar a los clientes que se conectan al sitio). He hecho lo mismo para el almacén de confianza (voy a necesitar la autenticación del cliente).

El problema que tengo ahora es que cuando me conecto a mi instancia de Tomcat a través de HTTPS, el certificado que se me presenta (el certificado del servidor) no es mi certificado real del servidor, sino la clave en el almacén de claves JKS. El uso de -Djavax.net.debug = ssl revela que presenta la CA correcta para la autenticación del cliente, pero no el certificado de servidor correcto.

adding as trusted cert: Subject: CN=A Issuer: CN=A Algorithm: RSA; Serial number: - Valid from Tue Nov 10 14:48:31 CET 2009 until Mon Feb 08 14:48:31 CET 2010 adding as trusted cert: Subject: X Issuer: X Algorithm: RSA; Serial number: - Valid from Wed Jan 19 01:00:00 CET 2005 until Mon Jan 19 00:59:59 CET 2015

He reemplazado los valores reales con los titulares de lugar. A = el nombre de dominio del servidor (pero en este caso, por alguna razón, esta es la clave y no el certificado). X = una CA de VeriSign (esto debería ser correcto). Tengo un certificado existente que me gustaría usar para presentarlo a los clientes, el cual importé en un almacén de claves JKS utilizando keytool.

La configuración del conector Tomcat:

Connector port="444" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="conf/ssl/keystore.jks" keystorePass="xx" keyAlias="testkey" truststoreFile="conf/ssl/truststore.jks" truststorePass="xx"

¿Alguna idea de por qué mi instancia de Tomcat no presenta el certificado correcto?


El problema es (aparentemente, no puedo confirmar esto) que es imposible importar correctamente un certificado generado previamente (y una clave coincidente) en un almacén de claves JKS y que Tomcat lo presente correctamente.

La situación en la que ocurrió mi problema es la siguiente:

  1. Tengo un archivo de certificado, que me generé usando OpenSSL desde cero (clave + CSR -> certificado), firmado por mi propia CA.
  2. Deseo configurar Tomcat para que presente este certificado en particular a los usuarios que se conectan a mi sitio.

La solución que encontré para trabajar es:

  1. Convierta el certificado existente y su clave privada al formato DER. Por ejemplo (usando OpenSSL):

    Para la clave privada ;

    openssl pkcs8 -topk8 -nocrypt -in my_private_key.key -inform PEM -out my_private_key.der -outform DER

    Para el certificado firmado real;

    openssl x509 -in my_certificate.crt -inform PEM -out my_certificate.der -outform DER

  2. Importe ambos archivos DER en un almacén de claves (archivo JKS) utilizando una clase Java personalizada.

    java ImportKey my_private_key.der my_certificate.der

    No me di cuenta de esto por mí mismo (todo el crédito es para el (los) inventor (es) original (es). La fuente de esta clase de Java y algunos detalles más se pueden encontrar here y here . Modifiqué esta clase ligeramente para que haya un tercer (o cuarto) parámetro que especifique la ubicación de salida del archivo JKS resultante.

El resultado final es un almacén de claves JKS que luego se puede utilizar en la configuración del conector Tomcat como el almacén de claves. La herramienta anterior generará el archivo JKS con las contraseñas predeterminadas para la clave y el propio archivo JKS, que se pueden cambiar más adelante utilizando keytool -storepasswd y keytool -keypasswd . Espero que esto ayude a las personas que enfrentan el mismo problema.


Su configuración debería funcionar correctamente.

El manual de Tomcat explica los pasos a seguir para tener un JKS adecuado.

Asegúrese de haber importado el certificado a los jks, con el alias apropiado (testKey)