Keystore y truststore


Hola a todos!

hace poco me tuve que enfrentar a los almacenes de claves, lo primero que tenía que aprender es que son, después, para que sirven, luego como hacer mi propio keystore/truststore y por último como emplearlo en mi aplicación (java).

QUE SON?

  • keystore: es un almacén de certificados con claves privadas.
  • truststore: es un almacén de certificados con claves públicas.

Un keystore puede contener tanto claves privadas como públicas, pero lo ideal es mantenerlos separados, mas que nada por claridad. Tanto el keystore como el truststore ademas de contener los certificados con claves públicas y/o privadas deben contener las CA’s que los autorizan. Las CA’s son autoridades certificadoras reconocidas(Certificate authority) a nivel mundial.

PARA QUE SIRVEN?

Un keystore se suele usar por ejemplo en un servicio web, este para que puedas enviar una petición puede requerir un certificado con clave privada. Entonces en tu aplicación debes tener un keystore con el certificado que requiera el web service.

Un truststore se utiliza para negociar una conexión segura entre un cliente y un servidor. Por ejemplo tenemos una aplicación cliente que tiene hacer una petición https a un web service y obtener una serie de datos, para que esto funcione es necesario establecer una relación de confianza entre el cliente y el servidor. Lo que debemos hacer es descargar el certificado con clave pública del servidor, es fácil, desde el propio navegador se puede hacer, y lo añadimos a nuestro truststore.

COMO HACER MI PROPIO KEYSTORE/TRUSTSTORE?

Para crear un keystore/truststore existen varias formas, una de ellas por linea de comandos, empleando la utilidad keytool proporcionada por la jdk o jre y otra utilizando un programa gráfico (GUI), como puede ser el keystore explorer o el portecle, aunque hay más el que más me gusta es el keystore explorer. Ahora vamos a ver como serían las intrucciones por línea de comandos para crear un keystore/trustore a partir de un certificado con clave privada o pública:

keytool –importkeystore -srckeystore -destkeystore keystore> -srcstoretype PKCS12 -deststoretype JKS -srcstorepass -deststorepass keystore> -srcalias <alias_certificado> -destalias <alias_keystore> -destkeypass <contraseña_keystore>

COMO EMPLEARLO EN MI APLICACIÓN (JAVA)?

Tenemos que indicarle, de alguna forma, a nuestra aplicación, en java, donde se encuentran nuestros almacenes de claves, su contraseña y el tipo de keystore o truststore con el que tratamos, lo haremos de la siguiente forma:

  • System.setProperty(«javax.net.ssl.keyStore», «ruta_al_keyStore»);
  • System.setProperty(«javax.net.ssl.keyStorePassword», «contraseña_del_keyStore»);
  • System.setProperty(«javax.net.ssl.keyStoreType«, «JKS»);
  • System.setProperty(«javax.net.ssl.trustStore», «ruta_al_trustStore»);
  • System.setProperty(«javax.net.ssl.trustStorePassword», «contraseña_del_trustStore»);
  • System.setProperty(«javax.net.ssl.trustStoreType«, «JKS»);

Bueno y esto es lo que he aprendido sobre keystores y truststores, espero que os sirva de ayuda, y si detectais algún error, os ruego, me aviseis 😉

hasta el próximo post!!

6 comentarios

  1. Me ha sido de gran ayuda! sobre todo los conocimientos teoricos que compratiste.

  2. Sencillo, corto, pero bastante formativo

  3. No entendi me puedes mandar el archivo keystore como un ejemplo para poderlo hacer

  4. Gracias por la explicación

  5. Muchas gracias por tu post, me ha servido de ayuda.

  6. Como si lo hubieses escrito en respuesta a mi pregunta 😀

Deja un comentario