내 JVM이 어떤 키 저장소를 사용하고 있는지 어떻게 알 수 있습니까? 아마도 내

내 JVM 키 저장소로 인증서를 가져와야합니다. 다음을 사용하고 있습니다.

keytool -import -alias daldap -file somecert.cer

그래서 아마도 내 전화를 다음과 같이 변경해야 할 것입니다.

keytool -import -alias daldap -file somecert.cer -keystore cacerts storepass changeit


답변

키 저장소는 JAVA_HOME---> JRE -->lib---> security--> cacerts. JAVA_HOME이 구성되어있는 위치 (가능하면 다음 위치 중 하나)를 확인해야합니다.

  1. 컴퓨터 —> 고급-> 환경 변수 —> JAVA_HOME

  2. 서버 시작 배치 파일.

가져 오기 명령 -keystore cacerts에서 (단지 cacerts를 말하는 대신 여기에 위의 JRE에 대한 전체 경로를 제공하십시오).


답변

키 저장소 위치

각 keytool 명령에는 keytool에서 -keystore관리하는 키 저장소에 대한 영구 키 저장소 파일의 이름과 위치를 지정 하는 옵션이 있습니다. 키 저장소는 기본적으로 .keystore“user.home”시스템 등록 정보에 의해 결정된대로 사용자의 홈 디렉토리에 이름이 지정된 파일에 저장됩니다 . 사용자 이름 uName이 주어지면 “user.home”속성 값의 기본값은

C:\Users\uName on Windows 7 systems
C:\Winnt\Profiles\uName on multi-user Windows NT systems
C:\Windows\Profiles\uName on multi-user Windows 95 systems
C:\Windows on single-user Windows 95 systems

따라서 사용자 이름이 “cathy”이면 “user.home”의 기본값은

C:\Users\cathy on Windows 7 systems
C:\Winnt\Profiles\cathy on multi-user Windows NT systems
C:\Windows\Profiles\cathy on multi-user Windows 95 systems

http://docs.oracle.com/javase/1.5/docs/tooldocs/windows/keytool.html


답변

Java 1.8이 설치된 Mac OS X 10.12 :

$ JAVA_HOME / jre / lib / security

cd $JAVA_HOME

/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home

거기에서 다음과 같습니다.

./jre/lib/security

거기에 cacerts 키 저장소가 있습니다.

이를 VM 옵션으로 지정하려면 :

-Djavax.net.ssl.trustStore=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit

나는 이것이 올바른 방법이라고 말하는 것이 아닙니다 (왜 자바가 JAVA_HOME 내에서 보는 것을 알지 못합니까?).하지만 이것이 작동하도록하기 위해해야 ​​할 일입니다.


답변

“홈”디렉토리에서 찾을 수 있습니다.

Windows 7의 경우 :

C:\Users\<YOUR_ACCOUNT>\.keystore

Linux (Ubuntu) :

/home/<YOUR_ACCOUNT>/.keystore

답변

이것은 나를 위해 작동합니다.

#! / bin / bash

CACERTS = $ ( readlink - e $ ( dirname $ ( readlink - e $ ( which keytool ))) /../ lib / security / cacerts )

만약 키 도구 - 목록 - 키 스토어 $ cacerts에 - StorePass를 changeit를 > / dev에 / 널 (null) ; 그때  
    에코 $ CACERTS
else 
    echo 'cacerts 파일을 찾을 수 없습니다.' > & 2 
    출구 1 fi 

Linux 전용입니다. 내 Solaris에는 읽기 링크가 없습니다. 결국 나는이 Perl-Script를 사용했습니다.

#! / usr / bin / env perl use strict ; 사용 경고 ; 사용 CWD QW ( realpath ); 
$ _ = 실제 경로 (( grep { -x && - f }


   map { "$ _ / keytool" } split ( ':' , $ ENV { PATH })) [ 0 ]); die "keytool을 찾을 수 없습니다" 정의 되지 않은 경우 $ _ ; $ keytool = $ _ ; 인쇄
  

 " '$ keytool'사용. \ n" ; 
s / keytool $ / /;
$ _ = realpath ($ _. '../ lib / 보안 / cacerts ');
die "cacerts를 찾을 수 없습니다", -f $ _가 아니면;
내 $ cacerts = $ _;
print " ' $ cacerts ' 로 가져 오기 . \ n";
`$ keytool -list -keystore "$ cacerts"-storepass changeit`;
$가 아니면 "키 컨테이너를 읽을 수 없습니다." == 0;
종료하면 $ ARGV [0] 당량 ' - D를 ';
foreach (@ARGV) {
    내 $ cert = $ _;
    s /\.[^.]+$//;
    내 $ alias = $ _;
    print " ' $ cert '를 ' $ alias ' 가져 오는 중 입니다. \ n";
    `keytool -importcert -file "$ cert"-alias "$ alias"-keystore "$ cacerts"-storepass changeit`;
    "인증서를 가져올 수 없습니다 : $?"경고 $가 아니면? == 0;
}

답변

DimtryB가 언급했듯이 기본적으로 키 저장소는 사용자 디렉터리 아래에 있습니다. 그러나 cacertsJVM이 키를 선택할 수 있도록 파일 을 업데이트하려는 경우에서 파일을 업데이트해야 cacerts합니다 jre/lib/security. 명령 keytool -list -keystore cacerts을 실행 하여 인증서가 추가되었는지 확인하여 키를 볼 수도 있습니다 .


답변

Debian에서는 openjdk 버전 “1.8.0_212″를 사용하여 여기에서 cacerts를 찾았습니다.

 /etc/ssl/certs/java/cacerts

물론이 경로를 출력하는 표준 명령이 있다면 편리합니다.