truststorefile generar commands cacerts java ssl keystore

generar - keystore java



¿Qué es Keystore? (2)

He estado recibiendo:

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target . . Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator. ValidatorException: PKIX path building failed: sun.security.provider. certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Al buscar cómo resolver esta excepción, he encontrado un término Keystore que no entiendo. ¿Qué es Keystore en términos simples? ¿Cómo está relacionado con SSL ?


Simplemente hablando, para establecer una conexión a un punto final SSL, debe confiar en su certificado público. Para confiar en un certificado, ya sea él mismo o el certificado de su emisor debe estar en el almacén de claves.

Piense en el almacén de claves como un conjunto de carpetas o una base de datos / repositorio que contiene certificados. Físicamente, es un archivo en JRE ( /lib/security/cacerts )

Este repositorio se puede modificar con el comando keytool que se envía con JRE. Vea este enlace para algunos comandos comunes. Otra forma es usar el cuadro de diálogo Certificado del Panel de control de Java (también se instala con el JRE):


Keystore en Java puede referirse a tres cosas, dependiendo del contexto. (Todos están estrechamente relacionados pero sutilmente diferentes).

  • Un almacén de claves puede ser un repositorio donde se pueden almacenar claves privadas, certificados y claves simétricas. Normalmente, este es un archivo, pero el almacenamiento también puede manejarse de diferentes maneras (por ejemplo, un token criptográfico o utilizando el propio mecanismo del sistema operativo).

  • KeyStore es también una clase que es parte de la API estándar. Básicamente es una forma de cargar, guardar y, en general, interactuar con uno de los almacenes de claves "físicas" como se describe anteriormente. Una KeyStore también puede estar puramente en la memoria, si solo necesita la abstracción API para su aplicación.

    Cómo cargar y manejar una instancia de KeyStore depende del formato del archivo de almacén de claves (u otro sistema de almacenamiento) que lo respalde. Múltiples formatos están disponibles. Algunos de los más comunes son JKS y PKCS # 12 (.p12).

  • "keystore" también se puede usar como la contraparte de "truststore". Aquí es donde puede ser confuso, ya que tanto el "almacén de claves" como el "almacén de confianza" son almacenes de claves, solo se usan para diferentes propósitos. Puede encontrar más detalles en esta respuesta . El almacén de claves se utiliza para inicializar el administrador de claves, mientras que el almacén de confianza se usa para inicializar el administrador de confianza. De la guía de referencia de JSSE :

    • Un TrustManager determina si las credenciales de autenticación remota (y, por lo tanto, la conexión) deberían ser confiables.

    • Un KeyManager determina qué credenciales de autenticación enviar al host remoto.

    Básicamente, un almacén de claves utilizado como almacén de confianza contendrá una cantidad de certificados (CA) en los que está dispuesto a confiar: esos son los anclajes de confianza que va a utilizar para verificar los certificados remotos que no conoce ni en los que confía. Por el contrario, un almacén de claves utilizado como almacén de claves contendrá su propio certificado y su clave privada: esto es lo que va a utilizar para autenticarse ante una ubicación remota (cuando sea necesario).

    Hay un almacén de confianza predeterminado incluido con JRE ( /lib/security/cacerts ). No hay un almacén de claves predeterminado, ya que generalmente es un paso más explícito para el usuario.

En el contexto de SSL / TLS, un almacén de claves (almacén de claves utilizado como almacén de claves) será donde un servidor almacena su certificado y clave privada (o, cuando se usa autenticación de certificado de cliente, donde el cliente almacena su certificado y clave privada). Un almacén de confianza (almacén de claves utilizado como almacén de confianza) será el lugar donde el cliente almacena los certificados de CA de las CA en las que confía, para poder verificar el certificado del servidor cuando realiza una conexión a un servidor SSL / TLS (de manera similar, en el lado del servidor, aquí también se almacenan los certificados de CA utilizados para verificar los certificados del cliente).

Normalmente, el error que está recibiendo (" ValidatorException: PKIX path building failed ") ocurre cuando el certificado del servidor al que se está conectando no se puede verificar utilizando ningún certificado en el almacén de confianza que está utilizando. En general, necesitaría tener en su almacén de confianza el certificado del servidor directamente en su almacén de confianza (que solo es manejable a pequeña escala) o el certificado CA de la CA utilizado para emitir el certificado del servidor (o uno de los certificados de la cadena presenta, cuando hay una cadena).