Qual é a diferença entre um keystore e um armazenamento confiável?
Qual é a diferença entre um keystore e um armazenamento confiável?
Respostas:
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.
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
).
Um keystore contém chaves privadas. Você só precisa disso se for um servidor ou se o servidor exigir autenticação do cliente.
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.
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 .
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.
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.
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.
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 .
Pelo menos no meu Mac OSX, o keyStore padrão é ${user.home}/.keystore
e 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/keyStore
ou
-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=password
ou-Djavax.net.ssl.trustStorePassword=password
Principal fonte:
http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html