Trust Store vs Key Store-creating with keytool

eu entendo que o teclado normalmente teria chaves privadas/públicas e a loja de confiança apenas Chaves Públicas (e representa a lista de partes confiáveis com as quais você pretende se comunicar). Bem, essa é a minha primeira suposição, então se isso não está correto, provavelmente não comecei muito bem...

eu estava interessado em entender como / quando você distingue as lojas ao usar keytool.

Até agora, criei uma série de teclas usando {[[6]}
keytool -import -alias bob -file bob.crt -keystore keystore.ks

que cria a minha chave-mestra.ficheiro ks. Eu respondo {[[2]} à pergunta eu confio em bob, mas não é claro para mim se isso criou um arquivo keystore ou um arquivo truststore? Eu posso configurar meu aplicativo para usar o arquivo como qualquer um.

-Djavax.net.ssl.keyStore=keystore.ks -Djavax.net.ssl.keyStorePassword=x
-Djavax.net.ssl.trustStore=keystore.ks -Djavax.net.ssl.trustStorePassword=x

e com System.setProperty( "javax.net.debug", "ssl") definido, consigo ver o certificado sob certificações de confiança (mas não sob a secção Keystone). O certificado particular que estou importando tem apenas uma chave pública e eu pretendo usá-lo para enviar coisas sobre uma conexão SSL para Bob (mas talvez seja melhor deixar para outra pergunta!).

{[5] quaisquer indicações ou esclarecimentos seriam muito apreciados. A saída de keytool é a mesma o que você importa e sua convenção justa que diz que um é um keystone e o outro uma loja de confiança? Qual é a relação ao usar SSL etc?

Author: ROMANIA_engineer, 2011-06-14

5 answers

A terminologia é um pouco confusa de facto, mas tanto {[[0]} como javax.net.ssl.trustStore são usados para especificar quais os keystores a usar, para dois fins diferentes. Os Keystores vêm em vários formatos e não são necessariamente arquivos (veja esta pergunta ), e keytool é apenas uma ferramenta para realizar várias operações neles (importar/exportar/list/...).

Os parâmetros javax.net.ssl.keyStore e javax.net.ssl.trustStore são os parâmetros predefinidos usados para construir KeyManager s e TrustManagers (respectivamente), depois usados para construir um SSLContext que contém essencialmente a configuração SSL/TLS a usar ao fazer uma ligação SSL / TLS através de um SSLSocketFactory ou um SSLEngine. Estas propriedades do sistema são exatamente de onde os valores padrão vêm, que é então usado por SSLContext.getDefault(), ele mesmo usado por SSLSocketFactory.getDefault(), por exemplo. (Tudo isso pode ser personalizado através da API em um número de lugares, se você não quiser usar os valores padrão e que específico SSLContexts para um determinado propósito.)

A diferença entre KeyManager e TrustManager (e, portanto, entre javax.net.ssl.keyStore e javax.net.ssl.trustStore é a seguinte: segue (citado no Guia de Referência JSSE):

Gestor de confiança: determina se o credenciais de autenticação remota (e assim, a conexão) deve ser fidedigno.

KeyManager: determina qual credenciais de autenticação para onde enviar o anfitrião remoto.

(outros parâmetros estão disponíveis e os seus valores por defeito estão descritos no Guia JSSE ref. Note que, embora exista um valor padrão para o trust store, não há nenhuma para a loja de chaves.)

Essencialmente, o teclado em {[[0]} deve conter as suas chaves e certificados privados, enquanto que o {[1] } deve conter os certificados de AC em que está disposto a confiar quando uma parte remota apresentar o seu certificado. Em alguns casos, eles podem ser uma e a mesma loja, embora muitas vezes é melhor prática de usar lojas distintas (especialmente quando eles são baseados em arquivos).

 268
Author: Bruno, 2017-05-23 12:10:33

Não há diferença entre arquivos keystore e truststore. Ambos são arquivos no formato de arquivo JKS proprietário. A distinção está no uso: tanto quanto sei, Java só irá usar a loja que é referenciada por javax.net.ssl.trustStore para procurar certificados em quem confiar ao criar conexões SSL. O mesmo para as chaves e javax.net.ssl.keyStore. Mas em teoria é bom usar um e o mesmo arquivo para confiança - e keystores.

 22
Author: musiKk, 2011-06-14 08:35:27

Para explicar de forma comum:

Trustore: Como o nome indica, é normalmente utilizado para armazenar os certificados de Entidades de confiança. Um processo pode manter uma loja de certificados de todas as suas partes de confiança em que confia.

KeyStore : usado para guardar as chaves do servidor (tanto públicas como privadas) juntamente com a cert assinada.

Durante o aperto de mão SSL,
  1. Um cliente tenta acesso aos https://

  2. E assim, o servidor responde fornecendo um certificado SSL (que é armazenado no seu teclado)

  3. Agora, o cliente recebe o certificado SSL e verifica-o através da trustStore (ou seja, a trustStore do cliente já tem um conjunto pré-definido de certificados em que confia.). É do tipo : posso confiar neste servidor ? É o mesmo servidor com quem estou a tentar falar ? Nenhum ataque do homem do meio ?

  4. Uma vez, o cliente verifica que é conversando com o servidor em que ele confia, então a comunicação SSL pode acontecer através de uma chave secreta compartilhada.

Nota: não estou a falar aqui de autenticação de clientes do lado do servidor. Se um servidor quer fazer a autenticação de um cliente também, então o servidor também mantém uma trustStore para verificar o cliente.
 20
Author: Balaji Boggaram Ramanarayan, 2018-02-16 19:18:47

Keystore é usado por um servidor para armazenar chaves privadas, e truststore é usado por cliente de terceiros para armazenar chaves públicas fornecidas pelo servidor para acessar. Fiz isso na minha candidatura à produção. Abaixo estão os passos para gerar certificados java para a comunicação SSL:

  1. gerar um certificado usando o comando keygen no windows:
Servidor Keytool-genkey-keystore.keystore-também conhecido por mycert-20161109-keyalg RSA-keysize 2048-validation 3950
  1. Auto certificar o certificado:
[[1]}Keytool-selfcert-também conhecido por mycert-20161109-keystore server.keystore-validity 3950
  1. exportar o certificado para a pasta:
[[1]}Keytool-export-alias mycert-20161109-keystore server.keystore-rfc-file mycert-20161109.cer
  1. Certificado de importação para a Loja do cliente:
[[1]}Keytool-importcert-também conhecido por mycert-20161109-file C:\certs\mycert-20161109 -Keystone .truststore
 9
Author: Akash5288, 2018-03-02 16:25:49
A Keystone guarda apenas chaves privadas, onde a shuststore guarda chaves públicas. Você irá querer gerar um certificado java para a comunicação SSL. Você pode usar um comando keygen no windows, esta provavelmente será a solução mais fácil.
 1
Author: Team END_TECH, 2017-12-19 13:58:07