Làm thế nào để lấy vị trí của cacerts của cài đặt java mặc định?


91

Tôi đang tìm cách lấy vị trí cacertscài đặt java mặc định, khi bạn chưa có JAVA_HOMEhoặc chưa JRE_HOMExác định.

Tôi cần một giải pháp ít nhất là hoạt động cho OS XLinux.

Đúng. java -vđược cho là hoạt động :)

Câu trả lời:


156

Trong Linux , để tìm vị trí của $JAVA_HOME:

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

các cacertsdưới lib/security/cacerts:

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

Trong mac OS X , để tìm $JAVA_HOMEchạy:

/usr/libexec/java_home

các cacertsdưới Home/lib/security/cacerts:

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

CẬP NHẬT (OS X với JDK)

mã trên đã được thử nghiệm trên máy tính mà không cần cài đặt JDK. Với JDK được cài đặt, như pR0Ps đã nói , nó ở

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

6
Trong OS X, cách "chính thức" để tìm JAVA_HOME đang chạy/usr/libexec/java_home
Daniel Serodio

2
@DanielSerodio, đã đồng ý. /usr/libexec/java_homecho tôi một câu trả lời khác với readlinklệnh -based ở trên và câu trước có vẻ đúng, trong đó nó chứa cacertstệp.
Andrew Ferrier

1
@DanielSerodio và AndrewFerrier cảm ơn các bạn, đã cập nhật câu trả lời.
Kuf

@Kuf JDK của tôi không có thư mục lib / bảo mật này trên Mac Yosemite. Tôi tích cực rằng tôi đang ở đúng $ JAVA_HOME
Brian

1
Trên OSX 10.10.5 thư mục bảo mật là dưới: Trang chủ / jre / lib / security
Sid Sarasvati

47

Kể từ OS X 10.10.1 (Yosemite), vị trí của cacertstệp đã được thay đổi thành

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

9

Nếu bạn cần truy cập các chứng chỉ đó theo chương trình thì tốt nhất là không sử dụng tệp mà hãy truy cập nó thông qua trình quản lý tin cậy. Mã sau là từ một Trường hợp thử nghiệm OpenJDK (đảm bảo bộ sưu tập cacerts đã xây dựng không trống):

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

Vì vậy, bạn không phải xử lý vị trí tệp hoặc mật khẩu kho khóa.


7

Trong MacOS Mojave, vị trí là:

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

Nếu sử dụng sdkman để quản lý các phiên bản java, các cacerts nằm trong

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

LƯU Ý: Đối với phiên bản hiện tại của sdkman w / JDK 11, vị trí là~/.sdkman/candidates/java/current/lib/security
Snekse

3

Ở High Sierra, các cacerts được đặt tại:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts


1

Bạn cũng có thể tham khảo readlink -f " which java". Tuy nhiên, nó có thể không hoạt động cho tất cả các trình bao bọc nhị phân. Rất có thể tốt hơn nếu thực sự bắt đầu một lớp Java.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.