java SSL y cert keytore


165

¿Cómo sabe mi programa Java dónde está mi almacén de claves que contiene el certificado? O, alternativamente, ¿cómo le digo a mi programa Java dónde buscar el almacén de claves?

Después de especificar el almacén de claves de alguna manera, ¿cómo especificar el certificado que se utilizará para autenticar el servidor al cliente?


mejor es evitar el uso de la configuración System.setProperty (los enfoques a continuación), ver: docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/… , cómo construir KeyManagerFactory para SSLContext
Marek- A-

Respuestas:


111
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);

44
Alguien sabe cómo hacer referencia a esto en un cuadro de Windows? System.setProperty ("javax.net.ssl.trustStore", "C: \\ Archivos de programa (x86) \\ Java \\ jdk1.7.0_21 \\ jre \\ lib \\ security \\ cacerts"); no funciona para mí :(
simgineer

44
En Windows, el nombre de ruta especificado debe utilizar barras diagonales, /, en lugar de barras diagonales inversas, \.
Droidman

¿Funcionó esto? Usé el mismo código donde mi archivo 'jks' contiene un certificado de CA. Pero todavía obtengo javax.xml.ws.WebServiceException: org.apache.axis2.AxisFault: Error de transporte: 403 Error: Error prohibido cuando llamo al código del cliente a través de los stubs generados por SOAP. ¿Algunas ideas?
james2611nov

1
También hay una propiedad del sistema de contraseña (javax.net.ssl.trustStorePassword). También se puede pasar como argumentos JVM -Djavax.net.ssl.trustStore = clientTrustStore.key -Djavax.net.ssl.trustStorePassword = customPassword Consulte docs.oracle.com/javadb/10.8.3.0/adminguide/cadminsslclient.html
Kingsly

@ james2611nov: Si obtiene un error HTTP 403 (o cualquier otra respuesta HTTP) llamando a un punto final HTTPS, eso significa que superó con éxito la configuración de TLS: las interacciones HTTP tienen lugar solo una vez que se configura el canal TLS ( de lo contrario no podrían ser protegidos). Entonces, sí, esta respuesta aparentemente funcionó para usted. :-)
ruakh

295

Las propiedades SSL se establecen en el nivel JVM a través de las propiedades del sistema. Lo que significa que puede configurarlos cuando ejecuta el programa (java -D ....) O puede configurarlos en código haciendo System.setProperty.

Las teclas específicas que debe configurar están a continuación:

javax.net.ssl.keyStore : ubicación del archivo de almacén de claves Java que contiene el certificado y la clave privada del proceso de una aplicación. En Windows, el nombre de ruta especificado debe usar barras diagonales, /, en lugar de barras diagonales inversas.

javax.net.ssl.keyStorePassword : contraseña para acceder a la clave privada desde el archivo de almacén de claves especificado por javax.net.ssl.keyStore. Esta contraseña se usa dos veces: para desbloquear el archivo del almacén de claves (contraseña de la tienda) y para descifrar la clave privada almacenada en el almacén de claves (contraseña de la clave).

javax.net.ssl.trustStore : ubicación del archivo de almacén de claves Java que contiene la colección de certificados de CA en los que confía este proceso de aplicación (almacén de confianza). En Windows, la ruta especificada debe utilizar barras diagonales, /en lugar de las barras, \.

Si no se especifica una ubicación de almacén de confianza utilizando esta propiedad, la implementación de SunJSSE busca y utiliza un archivo de almacén de claves en las siguientes ubicaciones (en orden):

  1. $JAVA_HOME/lib/security/jssecacerts
  2. $JAVA_HOME/lib/security/cacerts

javax.net.ssl.trustStorePassword : contraseña para desbloquear el archivo de almacén de claves (contraseña de tienda) especificado por javax.net.ssl.trustStore.

javax.net.ssl.trustStoreType - (Opcional) Para el formato de archivo de almacén de claves Java, esta propiedad tiene el valor jks (o JKS). Normalmente no especifica esta propiedad, porque su valor predeterminado ya es jks.

javax.net.debug : para activar el registro de la capa SSL / TLS, establezca esta propiedad en ssl.


17
Sería más apropiado vincular al documento del cual se cita esto. Supongo que esto es todo: fusesource.com/docs/broker/5.3/security/SSL-SysProps.html
Bruno

44
El documento oficial debe ser la Guía de referencia de JSSE: docs.oracle.com/javase/6/docs/technotes/guides/security/jsse/…
aleung


11
Para cualquiera que desee editar el almacén de confianza del sistema, la contraseña predeterminada es "changeit": community.oracle.com/thread/1540678?start=0&tstart=0
cwc

+1 para el accesorio javax.net.ssl.trustStorePassword. Había estado buscando por un tiempo y este fue el primero que lo mencionó.
jgreen

22

Solo una palabra de precaución. Si está intentando abrir un almacén de claves JKS existente en Java 9 en adelante, debe asegurarse de mencionar también las siguientes propiedades con valor como "JKS":

javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType

La razón es que el tipo de almacén de claves predeterminado según lo prescrito en el archivo java.security se ha cambiado a pkcs12 desde jks desde Java 9 en adelante.


11

En primer lugar, hay dos tipos de almacenes de claves.

Individual y general

La aplicación utilizará la indicada en el inicio o la predeterminada del sistema.

Será una carpeta diferente si se está ejecutando JRE o JDK, o si marca la personal o la "global".

También están encriptados

En resumen, el camino será como:

$JAVA_HOME/lib/security/cacerts para el "general", que tiene toda la AC para las Autoridades y es bastante importante.


Los tipos son 'almacén de claves' y 'almacén de confianza'. Por favor, no invente terminología redundante.
Marqués de Lorne

9

También puede mencionar la ruta en tiempo de ejecución utilizando las -Dpropiedades a continuación

-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks

En mi aplicación apache spark, solía proporcionar la ruta de los certificados y el almacén de claves usando la --confopción y extraJavaoptionsen spark-submit como se muestra a continuación

--conf 'spark.driver.extraJavaOptions= 
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks' 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.