내 JVM 키 저장소로 인증서를 가져와야합니다. 다음을 사용하고 있습니다.
keytool -import -alias daldap -file somecert.cer
그래서 아마도 내 전화를 다음과 같이 변경해야 할 것입니다.
keytool -import -alias daldap -file somecert.cer -keystore cacerts –storepass changeit
내 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이 구성되어있는 위치 (가능하면 다음 위치 중 하나)를 확인해야합니다.
컴퓨터 ---> 고급-> 환경 변수 ---> JAVA_HOME
서버 시작 배치 파일.
가져 오기 명령 -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
~/.keystore
파일을 찾고있었습니다 ! -keystore
매개 변수를 생략하면 기본 키 저장소 keytool
타겟팅을 파악할 수 없습니다 . 나는 cacerts
기계에서 다른 곳을 계속 찾고 있었다 . 내가 생성하는 키 도구 기대하지 않았다 ~/.keystore
홈 디렉토리에 않으며의 이름은 할 .keystore
대신 cacerts
. 자바 사람들이 문서화해야 할 빈칸을 채웠습니다! 감사합니다!
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
user.home
이 cygwin에 의해 설정된 $HOMEDRIVE$HOMEPATH
것이 아니라 Windows에 의해 설정된 것과 같기 때문에 $HOME
여기서 HOMEDRIVE=C:
그리고HOMEPATH=\Users\[YOUR ACCOUNT]
이것은 나를 위해 작동합니다.
#! / 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가 언급했듯이 기본적으로 키 저장소는 사용자 디렉터리 아래에 있습니다. 그러나 cacerts
JVM이 키를 선택할 수 있도록 파일 을 업데이트하려는 경우에서 파일을 업데이트해야 cacerts
합니다 jre/lib/security
. 명령 keytool -list -keystore cacerts
을 실행 하여 인증서가 추가되었는지 확인하여 키를 볼 수도 있습니다 .
lib/security
이 상대 이름 만 제공하면 자동으로 올바른 경로를 추가한다는 사실을 알게되어 기쁩니다 .
-importcert
. list 명령은 시스템 전체 인증서를 표시하지만 import 명령은 현재 디렉토리에 새 파일을 생성합니다.
updatedb; locate cacerts
cacerts 파일의 설치 위치를 찾는 데 도움이됩니다.
공식 OpenJDK 12 Docker 이미지를 사용하는 경우 Java 키 저장소의 위치는 다음과 같습니다.
/usr/java/openjdk-12/lib/security/cacerts
keytool -import -file example.crt -alias exampleCA -keystore truststore.jks
을 살펴보면 매개 변수도 사용합니다 -keystore
. IMHO는 매우 명확하지 않습니다. 그리고 마지막으로 중요한 것은 바로 그 정확한 문제에 대해 찾고 있었는데 그 질문을 발견했습니다. 다른 사람들도 똑같이 경험할 수 있습니다.