¿Cómo obtener la ubicación de los cacerts de la instalación java predeterminada?


92

Estoy buscando cómo obtener la ubicación de cacertsla instalación java predeterminada, cuando no la tiene JAVA_HOMEo está JRE_HOMEdefinida.

Necesito una solución que funcione al menos para OS Xy Linux.

Si. java -vse supone que funciona :)

Respuestas:


160

En Linux , para encontrar la ubicación de $JAVA_HOME:

readlink -f /usr/bin/java | sed "s:bin/java::"

la cacertsestán bajo lib/security/cacerts:

$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts

En mac OS X , para encontrar $JAVA_HOMEejecutar:

/usr/libexec/java_home

la cacertsestán bajo Home/lib/security/cacerts:

$(/usr/libexec/java_home)/lib/security/cacerts

ACTUALIZAR (OS X con JDK)

El código anterior se probó en una computadora sin JDK instalado. Con JDK instalado, como dijo pR0Ps , está en

$(/usr/libexec/java_home)/jre/lib/security/cacerts

6
En OS X, la forma "oficial" de encontrar JAVA_HOME se está ejecutando/usr/libexec/java_home
Daniel Serodio

2
@DanielSerodio, estuvo de acuerdo. /usr/libexec/java_homeme da una respuesta diferente del readlinkcomando -based anterior, y el primero parece ser correcto, ya que contiene el cacertsarchivo.
Andrew Ferrier

1
@DanielSerodio y AndrewFerrier gracias chicos, respuesta actualizada.
Kuf

@Kuf My JDK no tiene esta carpeta lib / security en Mac Yosemite. Estoy seguro de que estoy en el lugar correcto $ JAVA_HOME
Brian

1
En OSX 10.10.5, la carpeta de seguridad se encuentra en: Inicio / jre / lib / security
Sid Sarasvati

47

A partir de OS X 10.10.1 (Yosemite), la ubicación del cacertsarchivo se ha cambiado a

$(/usr/libexec/java_home)/jre/lib/security/cacerts

10

Si necesita acceder a esos certificados mediante programación, es mejor no usar el archivo en absoluto, sino acceder a él a través del administrador de confianza. El siguiente código es de un caso de prueba de OpenJDK (que asegura que la colección de cacerts compilada no esté vacía):

TrustManagerFactory trustManagerFactory =
    TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers =
    trustManagerFactory.getTrustManagers();
X509TrustManager trustManager =
    (X509TrustManager) trustManagers[0];
X509Certificate[] acceptedIssuers =
    trustManager.getAcceptedIssuers();

Por lo tanto, no tiene que lidiar con la ubicación del archivo o la contraseña del almacén de claves.


Esto no está leyendo el certificado instalado en cacerts. Puedo hacerlo si uso la ruta del archivo y la contraseña
Somnath Singh

8

En MacOS Mojave, la ubicación es:

/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/security/cacerts 

Si usa sdkman para administrar las versiones de Java, el cacerts está en

~/.sdkman/candidates/java/current/jre/lib/security

1
NOTA: Para las versiones actuales de sdkman con JDK 11, la ubicación es~/.sdkman/candidates/java/current/lib/security
Snekse

3

En High Sierra, los cacerts se encuentran en:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts


1

También puede consultar readlink -f " which java". Sin embargo, es posible que no funcione para todos los contenedores binarios. Lo más probable es que sea mejor iniciar una clase Java.

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.