Diferença entre um Java Keystore e um Truststore
1. Visão geral
Neste artigo rápido, forneceremos uma visão geral das diferenças entre um keystore Java e um truststore Java.
2. Conceitos
Na maioria dos casos,we use a keystore and a truststore when our application needs to communicate over SSL/TLS.
Geralmente, esses são arquivos protegidos por senha que ficam no mesmo sistema de arquivos que nosso aplicativo em execução. O formato padrão usado para esses arquivos éJKS until Java 8.
Desde o Java 9, porém,the default keystore format is PKCS12. A maior diferença entre JKS e PKCS12 é que JKS é um formato específico para Java, enquanto PKCS12 é uma maneira padronizada e neutra em termos de idioma de armazenamento de chaves e certificados privados criptografados.
3. Java KeyStore
A Java keystore stores private key entries, certificates with public keys or just secret keys que podemos usar para vários fins criptográficos. Ele armazena cada um por um alias para facilitar a pesquisa.
De um modo geral, as lojas de chaves mantêm as chaves que nosso aplicativo possui e que podemos usar para provar a integridade de uma mensagem e a autenticidade do remetente, digamos, assinando cargas úteis.
Normalmente,we’ll use a keystore when we are a server and want to use HTTPS. Durante um handshake SSL, o servidor consulta a chave privada do keystore e apresenta sua chave pública e certificado correspondentes ao cliente.
Da mesma forma, se o cliente também precisar se autenticar - uma situação chamada autenticação mútua -, o cliente também terá um armazenamento de chaves e também apresentará sua chave pública e certificado.
Não há armazenamento de chave padrão, então se quisermos usar um canal criptografado, teremos que definirjavax.net.ssl.keyStoreejavax.net.ssl.keyStorePassword. Se nosso formato de armazenamento de chave for diferente do padrão, poderíamos usarjavax.net.ssl.keyStoreType para personalizá-lo.
Of course, we can use these keys to service other needs as well. As chaves privadas podem assinar ou descriptografar dados, e as chaves públicas podem verificar ou criptografar dados. As chaves secretas também podem executar essas funções. Um keystore é um local que podemos guardar para essas chaves.
Também podemosinteract with the keystore programmatically.
4. Java TrustStore
Um armazenamento confiável é o oposto - enquanto um keystore normalmente mantém certificados que nos identificam, um armazenamento confiável mantém certificados que identificam outros.
Em Java, nós o usamos para confiar no terceiro com o qual estamos prestes a nos comunicar.
Veja o nosso exemplo anterior. Se um cliente conversar com um servidor baseado em Java por HTTPS, o servidor procurará a chave associada em seu keystore e apresentará a chave pública e o certificado ao cliente.
We, the client, then look up the associated certificate in our truststore. Se o certificado ou as autoridades de certificação apresentados pelo servidor externo não estiverem em nosso armazenamento confiável, obteremos umSSLHandshakeExceptione a conexão não será configurada com sucesso.
Java empacotou um truststore chamadocacerts e ele reside no diretório$JAVA_HOME/jre/lib/security.
Ele contém autoridades de certificação confiáveis e padrão:
$ keytool -list -keystore cacerts
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 92 entries
verisignclass2g2ca [jdk], 2018-06-13, trustedCertEntry,
Certificate fingerprint (SHA1): B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D
Vemos aqui que o armazenamento confiável contém 92 entradas de certificados confiáveis e uma das entradas é a entradaverisignclass2gca. . Isso significa que a JVM confiará automaticamente nos certificados assinados porverisignclass2g2ca.
Aqui,we can override the default truststore location via the javax.net.ssl.trustStore property. Da mesma forma, podemos definirjavax.net.ssl.trustStorePassword ejavax.net.ssl.trustStoreType para especificar a senha e o tipo do truststore.
5. Conclusão
Neste tutorial, discutimos as principais diferenças entre o keystore Java e o armazenamento confiável Java e seu objetivo.
Além disso, mostramos como os padrões podem ser substituídos pelas propriedades do sistema.
A seguir, poderíamos dar uma olhada no seguinteSSL guide ouJSSE Reference Guide para aprender mais detalhes sobre a comunicação criptografada em Java.