기본적으로 모든 Java 애플리케이션이 사용할 수 있는 Java Keystore로 자체 서명된 인증서를 가져오는 방법
SSL 연결을 설정할 Java 응용프로그램이 이 인증서를 신뢰하도록 자체 서명된 인증서를 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
그래도 달리려고 하면 다음과 같은 결과를 얻는다.
javax.net.properties.SSLHandshakeException: sun.security.validator.검증자예외: PKIX 경로 빌드 실패: sun.security.provider.certpath.SunCertPathBuilder예외: 요청한 대상에 대한 유효한 인증 경로를 찾을 수 없음
Windows에서 가장 쉬운 방법은 portecle 프로그램을 사용하는 것이다.
- portecle 다운로드 및 설치.
- 먼저 프로그램 실행에 사용되는 JRE 또는 JDK를 100% 알고 있는지 확인하십시오.64비트 윈도우 7에는 꽤 많은 JRE가 있을 수 있다.프로세스 탐색기가 이를 지원하거나 다음을 사용할 수 있음:
System.out.println(System.getProperty("java.home"));
- JAVA_ 파일 복사HOME\lib\security\cacerts to other folder.
- Portecle에서 File > Open Keystore File을 클릭한다.
- 캐시 파일 선택
- 이 암호 입력: 변경
- 도구 > 신뢰할 수 있는 인증서 가져오기 클릭
- mycertificate 파일을 찾아보십시오.펨
- 가져오기 클릭
- 신뢰 경로에 대한 경고를 보려면 확인을 누르십시오.
- 인증서에 대한 세부 정보가 표시되면 확인을 누르십시오.
- 인증서를 신뢰할 수 있는 인증서로 승인하려면 예를 누르십시오.
- 별칭을 요청하면 확인을 누르고 인증서를 가져왔다고 하면 확인을 다시 누르십시오.
- 저장을 누르십시오.이것을 잊지 마라. 그렇지 않으면 거스름돈이 없어진다.
- 파일을 찾은 위치로 복사하십시오.
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 keystore로 인증서 가져오기:
$ 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 filename.cer -alias randomaliasname -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
기본적으로 Java Cacerts 파일에 포함되지 않은 인증 기관에서 서명한 인증서를 사용하는 경우 HTTPS 연결을 위해 다음 구성을 완료하십시오.인증서를 캐커트로 가져오려면:
윈도우즈 탐색기를 열고 AX Core Client가 설치된 jre\lib\security 하위 폴더에 있는 cacerts 파일로 이동하십시오.기본 위치는 C:\Program Files\ 입니다.ACL 소프트웨어\AX Core Client\jre\lib\security
변경하기 전에 파일의 백업 복사본을 만드십시오.
사용 중인 인증 기관에서 받은 인증서에 따라 중간 인증서 및/또는 루트 인증서를 캐시 파일로 가져와야 할 수 있다.인증서를 가져오려면 다음 구문을 사용하십시오.
keytool -import -alias <alias> -keystore <cacerts_file> -trustcacerts -file <certificate_filename>
두 인증서를 모두 가져오는 경우 각 인증서에 대해 지정된 별칭이 고유해야 한다.
암호 프롬프트에 키 저장소의 암호를 입력하고 Enter 키를 누르십시오.cacerts 파일의 기본 Java 암호는 "changeit"이다.이 인증서를 신뢰하시겠습니까? 프롬프트에 'y'를 입력하고 Enter 키를 누르십시오.
사용할 수 있다keytool
, 자바 설치는 자바 설치 입니다.$JAVA_HOME/bin
는 자바키스토어가 $JAVA_HOME/lib/security/cacerts
또는$JAVA_HOME/jre/lib/security/cacerts
JDK 또는 JRE를 설치했는지에 따라 달라진다.
자바 9 이상을 사용하면 정확한 위치를 알 필요가 없다.당신은 그것을 사용할 수 있다.-cacerts
지름길로 선택하다
자바 9+
따라서 Java 9(Java 1.9라고 함) 이상에서는 간단하게
keytool -importcert -trustcacerts -cacerts -file myCert.pem -alias myCert
이전 Java 버전
Java 8(일명 1.8) 이상에서는 다음과 같이 키 저장소 위치를 지정해야 한다.
keytool -importcert -trustcacerts -keystore $JAVA_HOME/lib/security/cacerts -file myCert.pem -alias myCert
1.5)에서는 자바 5(일명 1.5)를 -importcert
옵션이 존재하지 않음.라고 불렸다.-import
하지만 그렇지 않으면 똑같아그러니 사용하라.
keytool -import -trustcacerts -keystore $JAVA_HOME/lib/security/cacerts -file myCert.pem -alias myCert
추가 옵션
- 신뢰 저장소 암호를 묻는 메시지가 표시되며 기본 암호는 changeit입니다.
- 가져오기를 자동으로 실행해야 하는 경우
-storepass changeit -noprompt
형식
keytool
X.509 v1, v2, v3 인증서 및 해당 유형의 인증서(P7B)로 구성된 PKCS#7 형식 인증서 체인을 가져올 수 있음가져올 데이터가 제공되어야 함
- 이진 인코딩 형식(DER) 중 하나
- 또는 인쇄 가능한 인코딩 형식(base64 인코딩이라고 함)으로, 다음 형식으로 둘러싸인
-----BEGIN
그리고-----END
선(PEM)
참고: PEM 형식의 인증서 체인이 실제로 작동하는지 잘 모르겠다.
보너스 스크립트
유감스럽지만, 이 방법은 Windows 사용자들을 위한 것이 아니다.
스택오버플로우(stackoverflow)에 대한 몇 가지 유용한 질문과 스마트한 답변 덕분에 만들어진 이 간단한 스크립트는 Java 버전을 확인하고 필요한 경우 올바른 키 저장소 위치를 결정하며, 하나의 명령어로 여러 개의 인증서를 가져올 수 있다.파일 패턴 인수를 작은 따옴표로 전달해야 한다는 점에 유의하십시오(사용법 참조).
추가 인증서쉿
#!/bin/bash
# Add custom root certificates to Java trust store
if [ "$#" -ne 1 ]; then
SCRIPT=`basename "$0"`
echo "Usage: $SCRIPT 'path/to/certs/*'"
exit 1
fi
CERTFILES=$1
JAVA_VERSION=`java -version 2>&1 | head -1 | cut -d'"' -f2 | sed '/^1\./s///' | cut -d'.' -f1`
if (( $JAVA_VERSION >= 9 )); then
CACERTS="-cacerts"
else
# Check where cacerts are located
# differs depending or jdk or jre installed
if [ -d "$JAVA_HOME/jre" ]; then
CACERTS="$JAVA_HOME/jre"
else
CACERTS="$JAVA_HOME"
fi
CACERTS="-keystore $CACERTS/lib/security/cacerts"
fi
# Now add certificates
for CERTFILE in $CERTFILES; do
# Remove path, then suffix to derive alias from filename
ALIAS=${CERTFILE##*/}
ALIAS=${ALIAS%.*}
$JAVA_HOME/bin/keytool -importcert -file "$CERTFILE" -alias "$ALIAS" $CACERTS -trustcacerts -storepass changeit -noprompt
if [ $? -ne 0 ]; then
echo "Failed to add $CERTFILE as $ALIAS to $CACERTS"
exit 1
fi
done
제공자로부터 인증서를 가져오십시오..cer로 끝나는 파일을 만들고 인증서를 붙여 넣으십시오.
텍스트 파일을 복사하거나 액세스할 수 있는 위치에 붙여넣은 후 cmd 프롬프트를 admin 및 cd로 jdk의 bin에 사용하십시오. 사용할 명령은 다음과 같다.keytool
다음을 사용하여 키 저장소 암호 변경:
keytool -storepasswd -keystore "path of the key store from c\ and down"
암호:changeit
그러면 새 암호를 두 번 입력하라는 메시지가 나타날 것이다.그런 다음 다음을 입력하십시오.
keytool -importcert -file "C:\Program Files\Java\jdk-13.0.2\lib\security\certificateFile.cer" -alias chooseAname -keystore "C:\Program Files\Java\jdk-13.0.2\lib\security\cacerts"
간단한 명령 'keytool'은 Windows 및/또는 Cygwin에서도 작동한다.
여기서 싸이그윈을 사용하고 있다면 내가 "S"의 하단에서 사용한 수정된 명령이다.Botha's"의 대답:
- JDK 내에서 사용할 JRE를 식별하십시오.
- 프롬프트/cygwin을 관리자로 시작
- 해당 JDK의 bin 디렉토리(예: cd /cygdrive/c/Program\ Files/Java/jdk1.8.0_121/jre/bin) 내부로 이동
keytool 명령을 내부에서 실행하십시오. 여기서 새 인증서의 마지막 경로를 지정하십시오.
./keytool.exe -import -trustcacerts -keystore ../lib/security/cacerts -storepass changeit -noprompt -alias myownaliasformysystem -file "D:\Stuff\saved-certs\ca.cert"
만약 이게 싸이그윈 밑에 있다면, 당신은 싸이그윈이 아닌 프로그램으로 가는 길을 주는 것이기 때문에, 그 경로는 DOS와 비슷하고 인용문으로 되어있다.
시도해보고 싶을 수도 있다.
keytool -import -trustcacerts -noprompt -keystore <full path to cacerts> -storepass changeit -alias $REMHOST -file $REMHOST.pem
난 솔직히 네가 그냥 쓰면 증명서가 어디에 있는지 모르겠어.cacerts
끝까지 해내다.
Java 리눅스에 인증서 설치
/opt/jdk(버전)/bin/keytool -import -file aliasname -file certificate.cer -keystore cacerts -storepass 암호
윈도우즈에서는 다음 명령어가 명령줄에서 작동함:
cd C:\Program Files\Java\jre1.8.0_301\lib\security\
keytool -import -trustcacerts -alias cert_ssl -file C:\opt\esb-config\keystores\cert.cer -noprompt -storepass changeit -keystore cacerts
changeit
트러스트 저장소의 기본 암호.
'Programing' 카테고리의 다른 글
Vue 또는 Axios 세션 쿠키 저장 안 함 (0) | 2022.05.07 |
---|---|
int 포인터 '++'가 1이 아니라 4가 증가하는 이유는? (0) | 2022.05.06 |
vuex 상태 + persistedState 플러그인에 토큰을 저장하는 것이 안전한가? (0) | 2022.05.06 |
Java에서 LinkedList over ArrayList를 사용하는 시기 (0) | 2022.05.06 |
ZoneOffset의 차이점은 무엇인가?UTC 및 ZoneId.of("UTC")? (0) | 2022.05.06 |