Bagaimana cara mendapatkan lokasi cacert dari instalasi java default?

92

Saya mencari tentang bagaimana mendapatkan lokasi dari cacertsinstalasi java default, bila Anda tidak memiliki JAVA_HOMEatau JRE_HOMEmenentukan.

Saya membutuhkan solusi yang setidaknya berhasil untuk OS Xdan Linux.

Iya. java -vdiasumsikan bekerja :)

sorin
sumber

Jawaban:

160

Di Linux , untuk menemukan lokasi $JAVA_HOME:

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

di cacertsbawah lib/security/cacerts:

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

Di bawah mac OS X , untuk menemukan $JAVA_HOMEjalankan:

/usr/libexec/java_home

di cacertsbawah Home/lib/security/cacerts:

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

UPDATE (OS X dengan JDK)

kode di atas telah diuji di komputer tanpa menginstal JDK. Dengan JDK terinstal, seperti yang dikatakan pR0Ps , itu di

$(/usr/libexec/java_home)/jre/lib/security/cacerts
Kuf
sumber
6
Di OS X, cara "resmi" untuk menemukan JAVA_HOME sedang berjalan/usr/libexec/java_home
Daniel Serodio
2
@DanielSerodio, setuju. /usr/libexec/java_homememberi saya jawaban yang berbeda dari readlinkperintah -based di atas, dan yang pertama tampaknya benar, karena berisi cacertsfile.
Andrew Ferrier
1
@DanielSerodio dan AndrewFerrier terima kasih teman-teman, jawaban diperbarui.
Kuf
@Kuf My JDK tidak memiliki folder lib / security ini di Mac Yosemite. Saya yakin bahwa saya berada di $ JAVA_HOME yang tepat
Brian
1
Di OSX 10.10.5, folder keamanan berada di bawah: Home / jre / lib / security
Sid Sarasvati
47

Pada OS X 10.10.1 (Yosemite), lokasi cacertsfile telah diubah menjadi

$(/usr/libexec/java_home)/jre/lib/security/cacerts
pR0Ps
sumber
10

Jika Anda perlu mengakses sertifikat tersebut secara terprogram, yang terbaik adalah tidak menggunakan file sama sekali, tetapi mengaksesnya melalui pengelola kepercayaan. Kode berikut ini berasal dari kasus Uji OpenJDK (yang memastikan koleksi cacerts yang dibuat tidak kosong):

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

Jadi Anda tidak perlu berurusan dengan lokasi file atau kata sandi keystore.

eckes
sumber
Ini tidak membaca sertifikat yang dipasang di cacerts. saya bisa jika menggunakan jalur file dan kata sandi
Somnath Singh
8

Di MacOS Mojave, lokasinya adalah:

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

Jika menggunakan sdkman untuk mengelola versi java, cacert dalam format

~/.sdkman/candidates/java/current/jre/lib/security
Nish
sumber
1
CATATAN: Untuk versi sdkman w / JDK 11 saat ini, lokasinya adalah~/.sdkman/candidates/java/current/lib/security
Snekse
3

Di High Sierra, cacert terletak di:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts

arpurush
sumber
1

Anda juga dapat berkonsultasi dengan readlink -f " which java". Namun ini mungkin tidak berfungsi untuk semua pembungkus biner. Kemungkinan besar lebih baik untuk benar-benar memulai kelas Java.

eckes
sumber