[java] 기본 Java 설치의 cacerts 위치를 얻는 방법은 무엇입니까?

내가 cacerts가지고 있지 JAVA_HOME않거나 JRE_HOME정의 하지 않았을 때 기본 Java 설치 위치를 얻는 방법을 찾고 있습니다 .

최소한 OS X및 에서 작동하는 솔루션이 필요합니다 Linux.

예. java -v작동하는 것으로 간주됩니다 🙂



답변

에서 리눅스 의 위치를 찾을 수 있습니다 $JAVA_HOME:

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

cacerts아래에 있습니다 lib/security/cacerts:

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

에서 맥 OS X , 찾아 $JAVA_HOME실행 :

/usr/libexec/java_home

cacerts아래에 있습니다 Home/lib/security/cacerts:

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

업데이트 (JDK가있는 OS X)

위 코드는 JDK가 설치되지 않은 컴퓨터에서 테스트되었습니다. JDK 설치와 함께, pR0Ps 말했듯이 , 그것에서이다

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


답변

OS X 10.10.1 (Yosemite)부터 cacerts파일 위치가 다음과 같이 변경되었습니다.

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


답변

이러한 인증서에 프로그래밍 방식으로 액세스해야하는 경우 파일을 전혀 사용하지 않고 신뢰 관리자를 통해 액세스하는 것이 가장 좋습니다. 다음 코드는 OpenJDK 테스트 케이스 에서 가져온 것입니다 (빌드 된 cacerts 컬렉션이 비어 있지 않은지 확인).

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

따라서 파일 위치 나 키 저장소 암호를 처리 할 필요가 없습니다.


답변

MacOS Mojave에서 위치는 다음과 같습니다.

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

sdkman을 사용하여 Java 버전을 관리하는 경우 cacerts는

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


답변

High Sierra에서 cacerts 는 다음 위치에 있습니다./Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts


답변

readlink -f ” which java“를 참조 할 수도 있습니다 . 그러나 모든 바이너리 래퍼에서 작동하지 않을 수 있습니다. 실제로 Java 클래스를 시작하는 것이 가장 좋습니다.


답변