Posteriormente a buscar en varios repositorios y páginas webs de internet al concluir nos hemos encontrado la respuesta que te compartiremos más adelante.
Solución:
De hecho, la terminología es un poco confusa, pero ambos javax.net.ssl.keyStore
y javax.net.ssl.trustStore
se utilizan para especificar qué almacenes de claves utilizar, con dos propósitos diferentes. Los almacenes de claves vienen en varios formatos y ni siquiera son necesariamente archivos (consulte esta pregunta), y keytool
es solo una herramienta para realizar varias operaciones sobre ellos (importar/exportar/listar/…).
El javax.net.ssl.keyStore
y javax.net.ssl.trustStore
Los parámetros son los parámetros predeterminados utilizados para construir KeyManager
arena TrustManager
s (respectivamente), luego se usa para construir un SSLContext
que esencialmente contiene la configuración de SSL/TLS para usar al realizar una conexión SSL/TLS a través de un SSLSocketFactory
o un SSLEngine
. Estas propiedades del sistema son de donde provienen los valores predeterminados, que luego son utilizados por SSLContext.getDefault()
, en sí mismo utilizado por SSLSocketFactory.getDefault()
por ejemplo. (Todo esto se puede personalizar a través de la API en varios lugares, si no desea utilizar los valores predeterminados y ese específico SSLContext
s para un propósito dado.)
La diferencia entre el KeyManager
y TrustManager
(y por lo tanto entre javax.net.ssl.keyStore
y javax.net.ssl.trustStore
) es el siguiente (citado de la guía de referencia JSSE):
TrustManager: determina si el control remoto credenciales de autenticación (y por lo tanto la conexión) debe ser de confianza.
KeyManager: determina qué credenciales de autenticación enviar al host remoto.
(Hay otros parámetros disponibles y sus valores predeterminados se describen en la guía de referencia de JSSE. Tenga en cuenta que, si bien existe un valor predeterminado para el almacén de confianza, no lo hay para el key Tienda.)
Esencialmente, el almacén de claves en javax.net.ssl.keyStore
está destinado a contener su privacidad keys y certificados, mientras que javax.net.ssl.trustStore
está destinado a contener los certificados de CA en los que está dispuesto a confiar cuando una parte remota presenta su certificado. En algunos casos, pueden ser la misma tienda, aunque a menudo es una mejor práctica usar tiendas distintas (especialmente cuando están basadas en archivos).
Para explicar en un caso de uso/propósito común o de manera sencilla:
TrustStore : Como su nombre indica, normalmente se utiliza para almacenar los certificados de entidades de confianza. Un proceso puede mantener un almacén de certificados de todas sus partes confiables en las que confía.
tienda de llaves : Se utiliza para almacenar el servidor keys (tanto público como privado) junto con el certificado firmado.
Durante el protocolo de enlace SSL,
-
Un cliente intenta acceder a https://
-
Y así, el servidor responde proporcionando un certificado SSL (que se almacena en su keyStore)
-
Ahora, el cliente recibe el certificado SSL y lo verifica a través de trustStore (es decir, el trustStore del cliente ya tiene un conjunto predefinido de certificados en los que confía). Es como: ¿Puedo confiar en este servidor? ¿Es este el mismo servidor con el que estoy tratando de hablar? ¿No hay ataques de intermediarios?
-
Una vez que el cliente verifica que está hablando con el servidor en el que confía, la comunicación SSL puede ocurrir a través de un secreto compartido. key.
Nota: No estoy hablando aquí de nada sobre la autenticación del cliente en el lado del servidor. Si un servidor también desea realizar una autenticación de cliente, entonces el servidor también mantiene un almacén de confianza para verificar el cliente. Entonces se convierte en TLS mutuo
No hay diferencia entre los archivos de almacén de claves y de almacén de confianza. Ambos son archivos en el formato de archivo patentado JKS. La distinción está en el uso: hasta donde yo sé, Java solo usará la tienda a la que hace referencia el -Djavax.net.ssl.trustStore
propiedad del sistema para buscar certificados en los que confiar al crear conexiones SSL. Igual por keys y -Djavax.net.ssl.keyStore
. Pero, en teoría, está bien usar el mismo archivo para los almacenes de confianza y de claves.
Si guardas alguna incertidumbre o disposición de innovar nuestro noticia puedes realizar una crítica y con gusto lo ojearemos.