Saltar al contenido

Importar certificados de Windows a Java

Solución:

Solución

En Windows, establezca las siguientes propiedades de JVM:

javax.net.ssl.trustStore=NUL
javax.net.ssl.trustStoreType=Windows-ROOT

Probé con éxito esto con Java 7, que se ejecuta en una instalación de Windows de 64 bits que confía en una CA autofirmada.

Configurar el proveedor de seguridad

Si la solución anterior funciona para usted (debería hacerlo), puede omitir esta sección. De lo contrario, verifique la configuración de su Java Cryptography Extension (JCE), que se incluye con los JDK modernos. Su instalación de JDK debe tener un archivo de propiedades que contenga una lista de proveedores de seguridad. La ubicación de ese archivo puede variar según las versiones de Java; el mío está ubicado en "%JAVA_HOME%jrelibsecurityjava.security". Dentro de ese archivo, ubique un conjunto de propiedades cuyos nombres comiencen con security.provider. Una de esas entradas debe establecerse en sun.security.mscapi.SunMSCAPI.

Ejemplo

Para establecer las propiedades en tiempo de ejecución, utilice el siguiente código Java:

System.setProperty("javax.net.ssl.trustStore", "NUL");
System.setProperty("javax.net.ssl.trustStoreType", "Windows-ROOT");

Explicación

javax.net.ssl.trustStoreType

En Windows, Java se envía con SunMSCAPI, un proveedor de seguridad que en realidad es un envoltorio del CAPI de Windows.

Establecer el javax.net.ssl.trustStoreType propiedad a Windows-ROOT indica a Java que consulte el almacén de claves ROOT nativo de Windows para los certificados de confianza, que incluye las CA raíz. (Del mismo modo, establecer javax.net.ssl.keyStoreType para Windows-MY le dice a Java que consulte el almacén de claves nativo de Windows MY para los certificados específicos del usuario y sus claves correspondientes).

javax.net.ssl.trustStore

Si el javax.net.ssl.trustStoreType la propiedad está establecida en Windows-ROOT, uno esperaría que el valor de javax.net.ssl.trustStore se ignora y que se puede establecer en e. gramo. NONE.

Una solución común para este problema es configurar javax.net.ssl.trustStore para NONEy luego crear un archivo ficticio cuyo nombre de archivo es NONE. Si se ve afectado por esta peculiaridad, intente configurar javax.net.ssl.trustStore para NUL por lo que no tendrá que crear ningún archivo ficticio.

¿Hay alguna manera de decirle a Java que confíe en cualquier certificado en el que Windows pueda confiar?

Por favor verifique la respuesta de @ synoly

La JVM predeterminada se encuentra en jre/lib/security/cacerts. También puede configurar su propio almacén de confianza:

System.setProperty ("javax.net.ssl.trustStore", path_to_your_trustore_jks_file);
System.setProperty ("javax.net.ssl.trustStorePassword", "password");

¿Hay alguna manera de importar todos los certificados de confianza del almacén de confianza de Windows a los cacerts de Java?

No hay ningún proceso automático, pero puede crear un programa para extraer autoridades de confianza del almacén de certificados de Windows e importarlo a un almacén de confianza configurado para usar en su aplicación (no se recomienda modificar cacerts)

//Read Windows truststore
KeyStore ks = KeyStore.getInstance("Windows-ROOT");
ks.load(null, null) ;
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *