Definições de armazenamento confiável e keystore

Respostas:

268

Um keystore contém chaves privadas e os certificados com suas chaves públicas correspondentes.

Um armazenamento confiável contém certificados de outras partes com quem você espera se comunicar ou de autoridades de certificação confiáveis ​​para identificar outras partes.

Darron
fonte
12
Embora isso deva ser verdade na prática, eles podem (e geralmente são) um na mesma. Você pode realmente importar uma chave privada e um certificado público para o "truststore" padrão [java home] / jre / lib / security / cacerts. O utilitário keytool não faz distinção nos dois termos, apenas nos tipos de loja (ou seja, - JKS vs. PKCS12). Aliás, Java faz a mesma coisa no código-fonte. Você cria um java.security.KeyStore e usa um gerenciador de confiança para gerenciar os certificados, mas não há classe TrustStore.
4
Java não tem um TrustStore per se . Ou não consegui encontrá-lo nos documentos java (por exemplo java.security.TrustStore). Quando queremos confiar em uma Autoridade de Certificação, ela é confiável através de um KeyStore(e o KeyStoreé passado para o TrustManagerFactory).
JWW
5
Vale ressaltar que KeyStore.load(InputStream is, char[] password)( docs ) pode ter uma senha nula e, em seguida, dará acesso a certificados públicos. Ou seja, o código que quer procurar um truststore não precisa saber a senha (por razões muito boas!)
xverges
83
  1. Um keystore contém chaves privadas. Você só precisa disso se for um servidor ou se o servidor exigir autenticação do cliente.

  2. Um armazenamento confiável contém certificados de CA em quem confiar. Se o certificado do servidor for assinado por uma CA reconhecida, o armazenamento confiável padrão fornecido com o JRE já confiará nele (porque já confia em CAs confiáveis), para que você não precise criar o seu próprio ou adicionar algo ao um do JRE.

Fonte

ha9u63ar
fonte
73

Em um handshake SSL, o objetivo do trustStore é verificar as credenciais e o objetivo do keyStore é fornecer credenciais .

keyStore

O keyStore em Java armazena a chave privada e os certificados correspondentes às suas chaves públicas e exige se você é servidor SSL ou SSL requer autenticação de cliente.

TrustStore

O TrustStore armazena certificados de terceiros, seus aplicativos Java se comunicam ou certificados assinados pela CA (autoridades de certificação como Verisign, Thawte, Geotrust ou GoDaddy) que podem ser usados ​​para identificar terceiros.

TrustManager

O TrustManager determina se a conexão remota deve ser confiável ou não, ou seja, se a parte remota é a quem alega e o KeyManager decide quais credenciais de autenticação devem ser enviadas ao host remoto para autenticação durante o handshake SSL.

Se você for um servidor SSL, usará a chave privada durante o algoritmo de troca de chaves e enviará certificados correspondentes às suas chaves públicas para o cliente, esse certificado será adquirido na keyStore. No lado do cliente SSL, se estiver escrito em Java, ele usará certificados armazenados no trustStore para verificar a identidade do Servidor. Os certificados SSL geralmente são fornecidos como arquivo .cer, que é adicionado ao keyStore ou trustStore usando qualquer utilitário de gerenciamento de chaves, por exemplo, keytool .

Fonte: http://javarevisited.blogspot.ch

Aniket Thakur
fonte
31

Você também pode estar interessado na redação da Sun, como parte da documentação JSSE padrão:

http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores

Normalmente, o armazenamento confiável é usado para armazenar apenas chaves públicas, para fins de verificação, como na autenticação X.509. Para fins de gerenciamento, é bastante comum administradores ou desenvolvedores simplesmente fundirem os dois em um único repositório.

Peter Mularien
fonte
1
Dá a 404 infelizmente
Chris Praia
@ ChrisBeach - atualizou o link para o correto no site da Oracle.
Peter Mularien
1
O armazenamento confiável
Marquês de Lorne
9

Em Java, qual é a diferença entre um keystore e um armazenamento confiável?

Aqui está a descrição dos documentos Java no Guia de Referência do Java Secure Socket Extension (JSSE) . Eu não acho que isso lhe diga algo diferente do que os outros disseram. Mas fornece a referência oficial.

keystore / armazenamento confiável

Um keystore é um banco de dados do material principal. O material principal é usado para vários propósitos, incluindo autenticação e integridade dos dados. Vários tipos de keystores estão disponíveis, incluindo PKCS12 e JKS da Oracle.

De um modo geral, as informações do keystore podem ser agrupadas em duas categorias: entradas de chave e entradas de certificado confiáveis. Uma entrada de chave consiste na identidade de uma entidade e sua chave privada e pode ser usada para diversos fins criptográficos. Por outro lado, uma entrada de certificado confiável contém apenas uma chave pública, além da identidade da entidade. Portanto, uma entrada de certificado confiável não pode ser usada onde uma chave privada é necessária, como em um javax.net.ssl.KeyManager. Na implementação JDK do JKS, um keystore pode conter entradas de chave e entradas de certificado confiáveis.

Um armazenamento confiável é um armazenamento de chaves usado ao tomar decisões sobre o que confiar. Se você receber dados de uma entidade na qual você já confia e se puder verificar se a entidade é a que afirma ser, poderá assumir que os dados realmente vieram dessa entidade.

Uma entrada só deve ser adicionada a um armazenamento confiável se o usuário confiar nessa entidade. Ao gerar um par de chaves ou ao importar um certificado, o usuário confia nessa entrada. Qualquer entrada no armazenamento confiável é considerada uma entrada confiável.

Pode ser útil ter dois arquivos de keystore diferentes: um contendo apenas suas entradas de chave e o outro contendo suas entradas de certificado confiáveis, incluindo certificados de CA. O primeiro contém informações privadas, enquanto o segundo não. O uso de dois arquivos em vez de um único arquivo de armazenamento de chaves fornece uma separação mais limpa da distinção lógica entre seus próprios certificados (e chaves privadas correspondentes) e os certificados de outras pessoas. Para fornecer mais proteção às suas chaves privadas, armazene-as em um keystore com acesso restrito e forneça os certificados confiáveis ​​em um keystore mais acessível ao público, se necessário.

jww
fonte
4
  1. A primeira e principal diferença entre trustStore e keyStore é que o trustStore é usado pelo TrustManager para determinar se a conexão remota deve ser confiável; o keyStore é usado no KeyManager para decidir quais credenciais de autenticação devem ser enviadas ao host remoto para autenticação durante o handshake SSL.

  2. Outra diferença é que o keyStore teoricamente contém chaves privadas necessárias apenas se você estiver executando um servidor na conexão SSL ou tiver ativado a autenticação do cliente no servidor e, por outro lado, o trustStore armazena chave pública ou certificados da CA (Autoridades de Certificação) que são usados ​​para confiar em parte remota ou conexão SSL.

    Na verdade, você pode armazenar no mesmo arquivo as chaves pública e privada, uma vez que a ferramenta para gerenciar esse arquivo é a mesma (keytool), portanto, você pode usar um único arquivo para os dois propósitos, mas provavelmente não deve .

  3. Pelo menos no meu Mac OSX, o keyStore padrão é ${user.home}/.keystoree o trustStore padrão é /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts.

    Se você deseja substituí-los, adicione os parâmetros JVM -Djavax.net.ssl.keyStore /path/to/keyStoreou -Djavax.net.ssl.trustStore /path/to/trustStore. Você também pode precisar definir a senha do keyStore no caso de java.security.UnrecoverableKeyException: Password must not be null, usando o parâmetro -Djavax.net.ssl.trustStorePassword=passwordou-Djavax.net.ssl.trustStorePassword=password

Principal fonte:

http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html

alessiop86
fonte