¿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 :)

sorin
fuente

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
Kuf
fuente
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
pR0Ps
fuente
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.

eckes
fuente
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
Nish
fuente
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

Arpurush
fuente
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.

eckes
fuente