자체 서명 된 인증서를 Java로 가져 와서 SSL 연결을 설정하려는 Java 응용 프로그램이이 인증서를 신뢰하도록하고 싶습니다.
지금까지 가져 왔습니다
keytool -import -trustcacerts -noprompt -storepass changeit -alias $REMHOST -file $REMHOST.pem
keytool -import -trustcacerts -noprompt -keystore cacerts -storepass changeit -alias $REMHOST -file $REMHOST.pem
아직도, 내가 달리려고 할 때 나는 HTTPSClient.class
여전히 얻는다 :
javax.net.ssl.SSLHandshakeException : sun.security.validator.ValidatorException : PKIX 경로 작성 실패 : sun.security.provider.certpath.SunCertPathBuilderException : 요청 된 대상에 대한 유효한 인증 경로를 찾을 수 없습니다.
답변
Windows 에서 가장 쉬운 방법은 프로그램 portecle 을 사용하는 것 입니다.
- portecle을 다운로드하여 설치하십시오.
- 먼저 프로그램을 실행하는 데 사용되는 JRE 또는 JDK를 100 % 확인하십시오. 64 비트 Windows 7에는 꽤 많은 JRE가있을 수 있습니다. 프로세스 탐색기가이를 도와 주거나 다음을 사용할 수 있습니다.
System.out.println(System.getProperty("java.home"));
- JAVA_HOME \ lib \ security \ cacerts 파일을 다른 폴더로 복사하십시오.
- Portecle에서 파일> 키 저장소 파일 열기를 클릭하십시오.
- cacerts 파일을 선택하십시오
- 이 비밀번호를 입력하십시오 : changeit
- 도구> 신뢰할 수있는 인증서 가져 오기를 클릭하십시오.
- mycertificate.pem 파일을 찾습니다.
- 가져 오기를 클릭하십시오
- 신뢰 경로에 대한 경고를 보려면 확인을 클릭하십시오.
- 인증서에 대한 세부 사항이 표시되면 확인을 클릭하십시오.
- 인증서를 신뢰할 수있는 것으로 승인하려면 예를 클릭하십시오.
- 별명을 요청하면 확인을 클릭하고 인증서를 가져 왔음을 알리면 확인을 다시 클릭하십시오.
- 저장을 클릭하십시오. 이것을 잊지 마십시오. 그렇지 않으면 변경 사항이 취소됩니다.
- 파일 cacerts를 찾은 위치로 다시 복사하십시오.
Linux에서 :
다음과 같이 이미 사용중인 웹 서버에서 SSL 인증서를 다운로드 할 수 있습니다.
$ echo -n | openssl s_client -connect www.example.com:443 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/examplecert.crt
선택적으로 인증서 정보를 확인하십시오.
$ openssl x509 -in /tmp/examplecert.crt -text
인증서를 Java cacerts 키 저장소로 가져 오십시오.
$ keytool -import -trustcacerts -keystore /opt/java/jre/lib/security/cacerts \
-storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt
답변
D:\Java\jdk1.5.0_10\bin\keytool -import -file "D:\Certificates\SDS services\Dev\dev-sdsservices-was8.infavig.com.cer" -keystore "D:\Java\jdk1.5.0_10\jre\lib\security\cacerts" -alias "sds certificate"
답변
인증서를 키 저장소에 추가하는 작은 스크립트를 작성하여 사용하기가 훨씬 쉬워졌습니다.
https://github.com/ssbarnea/keytool-trust 에서 최신 버전을 얻을 수 있습니다.
#!/bin/bash
# version 1.0
# https://github.com/ssbarnea/keytool-trust
REMHOST=$1
REMPORT=${2:-443}
KEYSTORE_PASS=changeit
KEYTOOL="sudo keytool"
# /etc/java-6-sun/security/cacerts
for CACERTS in /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts \
/usr/lib/jvm/java-7-oracle/jre/lib/security/cacerts \
"/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts" \
"/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/java/lib/security/cacerts"
do
if [ -e "$CACERTS" ]
then
echo --- Adding certs to $CACERTS
# FYI: the default keystore is located in ~/.keystore
if [ -z "$REMHOST" ]
then
echo "ERROR: Please specify the server name to import the certificatin from, eventually followed by the port number, if other than 443."
exit 1
fi
set -e
rm -f $REMHOST:$REMPORT.pem
if openssl s_client -connect $REMHOST:$REMPORT 1>/tmp/keytool_stdout 2>/tmp/output </dev/null
then
:
else
cat /tmp/keytool_stdout
cat /tmp/output
exit 1
fi
if sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' </tmp/keytool_stdout > /tmp/$REMHOST:$REMPORT.pem
then
:
else
echo "ERROR: Unable to extract the certificate from $REMHOST:$REMPORT ($?)"
cat /tmp/output
fi
if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT >/dev/null
then
echo "Key of $REMHOST already found, skipping it."
else
$KEYTOOL -import -trustcacerts -noprompt -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
fi
if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -keystore "$CACERTS" >/dev/null
then
echo "Key of $REMHOST already found in cacerts, skipping it."
else
$KEYTOOL -import -trustcacerts -noprompt -keystore "$CACERTS" -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
fi
fi
done
“`
답변
이것은 나를 위해 일했습니다. 🙂
sudo keytool -importcert -file 파일 이름 .cer -alias randomaliasname -keystore $ JAVA_HOME / jre / lib / security / cacerts -storepass changeit
답변
기본적으로 Java cacerts 파일에 포함되지 않은 인증 기관에서 서명 한 인증서를 사용하는 경우 HTTPS 연결을 위해 다음 구성을 완료해야합니다. 인증서를 cacerts로 가져 오려면
- Windows 탐색기를 열고 cacerts 파일을 탐색하십시오.이 파일은 AX Core Client가 설치된 jre \ lib \ security 하위 폴더에 있습니다. 기본 위치는 C : \ Program Files \ ACL Software \ AX Core Client \ jre \ lib \ security입니다.
- 변경하기 전에 파일의 백업 사본을 작성하십시오.
- 사용중인 인증 기관에서받은 인증서에 따라 중간 인증서 및 / 또는 루트 인증서를 cacerts 파일로 가져와야 할 수 있습니다. 다음 구문을 사용하여 인증서를 가져 오십시오. keytool -import -alias -keystore -trustcacerts -file
- 두 인증서를 모두 가져 오는 경우 각 인증서에 지정된 별명이 고유해야합니다.
- “Password”프롬프트에서 키 저장소의 비밀번호를 입력하고 Enter를 누르십시오. cacerts 파일의 기본 Java 비밀번호는“changeit”입니다. “이 인증서를 신뢰 하시겠습니까?”에 ‘y’를 입력하십시오. 프롬프트하고 Enter를 누르십시오.
답변
간단한 명령 ‘keytool’은 Windows 및 / 또는 Cygwin에서도 작동합니다.
Cygwin을 사용하는 경우 여기에 “S.Botha ‘s”답변의 맨 아래에서 사용한 수정 된 명령이 있습니다.
- 사용할 JDK 내부의 JRE를 식별해야합니다.
- 관리자로 프롬프트 / cygwin을 시작하십시오
- 해당 JDK의 bin 디렉토리로 이동하십시오 (예 : cd / cygdrive / c / Program \ Files / Java / jdk1.8.0_121 / jre / bin).
-
내부에서 keytool 명령을 실행하십시오. 여기에서 다음과 같이 끝에 새 Cert의 경로를 제공하십시오.
./keytool.exe -import -trustcacerts -keystore ../lib/security/cacerts -storepass changeit -noprompt -alias myownaliasformysystem -file "D:\Stuff\saved-certs\ca.cert"
Cygwin 아래에 있으면 Cygwin이 아닌 프로그램에 대한 경로를 제공하므로 경로는 DOS와 유사하며 따옴표로 표시됩니다.
답변
시도하고 싶을 수도 있습니다
keytool -import -trustcacerts -noprompt -keystore <full path to cacerts> -storepass changeit -alias $REMHOST -file $REMHOST.pem
난 그냥 당신이 그냥 cacerts
전체 경로를 제공 작성하면 인증서를 넣을 곳을 솔직히 모른다