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


91

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

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

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

답변:


158

에서 리눅스 의 위치를 찾을 수 있습니다 $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

6
OS X에서 JAVA_HOME을 찾는 "공식적인"방법이 실행 중입니다/usr/libexec/java_home
Daniel Serodio

2
@DanielSerodio, 동의했습니다. 위 /usr/libexec/java_homereadlink기반 명령과 다른 대답을 제공 하며 cacerts파일 이 포함되어 있다는 점에서 전자가 올바른 것 같습니다 .
Andrew Ferrier 2014 년

1
@DanielSerodio와 AndrewFerrier 감사합니다. 답변이 업데이트되었습니다.
Kuf

@Kuf My JDK에는 Mac Yosemite에이 lib / security 폴더가 없습니다. 나는 내가 오른쪽에 있다고 확신한다 $ JAVA_HOME
Brian

1
OSX 10.10.5의 보안 폴더 아래 : 홈 / JRE / lib 디렉토리 / 보안
시드 Sarasvati

47

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

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

9

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

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

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


이것은 cacerts에 설치된 인증서를 읽는 것이 아닙니다. 파일 경로와 암호를 사용하면 가능합니다
Somnath Singh

7

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

참고 : 현재 버전의 sdkman (JDK 11 포함)의 경우 위치는~/.sdkman/candidates/java/current/lib/security
Snekse

3

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


1

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.