Varsayılan java kurulumunun cacerts konumunu nasıl elde edebilirim?


92

Sahip cacertsolmadığınız JAVA_HOMEveya JRE_HOMEtanımlamadığınız durumlarda, varsayılan java kurulumunun konumunu nasıl elde edeceğime bakıyorum .

En azından OS Xve için çalışan bir çözüme ihtiyacım var Linux.

Evet. java -vçalıştığı varsayılıyor :)

Yanıtlar:


160

Linux altında , aşağıdakilerin konumunu bulmak için $JAVA_HOME:

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

cacertsaltındadır lib/security/cacerts:

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

Mac OS X altında , $JAVA_HOMEçalıştırmayı bulmak için :

/usr/libexec/java_home

cacertsaltındadır Home/lib/security/cacerts:

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

GÜNCELLEME (JDK ile OS X)

Yukarıdaki kod, JDK kurulu olmayan bilgisayarda test edilmiştir. JDK kurulduğunda, pR0P'lerin dediği gibi ,

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

6
OS X'te, JAVA_HOME'u bulmanın "resmi" yolu çalışıyor/usr/libexec/java_home
Daniel Serodio

2
@DanielSerodio, kabul etti. /usr/libexec/java_homebana readlinkyukarıdaki -based komutundan farklı bir cevap veriyor ve ilki, cacertsdosyayı içerdiği için doğru görünüyor .
Andrew Ferrier

1
@DanielSerodio ve AndrewFerrier teşekkürler arkadaşlar, cevap güncellendi.
Kuf

@Kuf JDK'mda Mac Yosemite'de bu lib / güvenlik klasörü yok. Doğru olduğumdan eminim $ JAVA_HOME
Brian

1
OSX 10.10.5'te güvenlik klasörü şunun altındadır: Ana Sayfa / jre / lib / security
Sid Sarasvati

47

OS X 10.10.1 (Yosemite) itibarıyla cacertsdosyanın konumu şu şekilde değiştirilmiştir:

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

10

Bu sertifikalara programlı olarak erişmeniz gerekiyorsa, dosyayı hiç kullanmamak, güven yöneticisi aracılığıyla erişmek en iyisidir. Aşağıdaki kod bir OpenJDK Test durumundandır (bu, yerleşik cacerts koleksiyonunun boş olmadığından emin olur):

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

Böylece dosya konumu veya anahtar deposu şifresiyle uğraşmanıza gerek kalmaz.


Bu, cacerts'ta yüklü olan sertifikayı okumuyor. dosya yolu ve şifre kullanılıyorsa yapabilirim
Somnath Singh

8

MacOS Mojave'de konum şudur:

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

Java sürümlerini yönetmek için sdkman kullanıyorsanız, cacerts

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

1
NOT: sdkman w / JDK 11'in mevcut sürümleri için konum~/.sdkman/candidates/java/current/lib/security
Snekse

3

High Sierra'da, cacerts şu adreste bulunur:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts


1

Ayrıca readlink -f " which java" ye de başvurabilirsiniz . Ancak, tüm ikili paketleyiciler için çalışmayabilir. Bir Java sınıfına başlamak büyük olasılıkla daha iyidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.