[java] 자체 서명 된 인증서를 기본적으로 모든 Java 응용 프로그램에서 사용할 수있는 Java 키 저장소로 올바르게 가져 오는 방법은 무엇입니까?

자체 서명 된 인증서를 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 을 사용하는 입니다.

  1. portecle을 다운로드하여 설치하십시오.
  2. 먼저 프로그램을 실행하는 데 사용되는 JRE 또는 JDK를 100 % 확인하십시오. 64 비트 Windows 7에는 꽤 많은 JRE가있을 수 있습니다. 프로세스 탐색기가이를 도와 주거나 다음을 사용할 수 있습니다.System.out.println(System.getProperty("java.home"));
  3. JAVA_HOME \ lib \ security \ cacerts 파일을 다른 폴더로 복사하십시오.
  4. Portecle에서 파일> 키 저장소 파일 열기를 클릭하십시오.
  5. cacerts 파일을 선택하십시오
  6. 이 비밀번호를 입력하십시오 : changeit
  7. 도구> 신뢰할 수있는 인증서 가져 오기를 클릭하십시오.
  8. mycertificate.pem 파일을 찾습니다.
  9. 가져 오기를 클릭하십시오
  10. 신뢰 경로에 대한 경고를 보려면 확인을 클릭하십시오.
  11. 인증서에 대한 세부 사항이 표시되면 확인을 클릭하십시오.
  12. 인증서를 신뢰할 수있는 것으로 승인하려면 예를 클릭하십시오.
  13. 별명을 요청하면 확인을 클릭하고 인증서를 가져 왔음을 알리면 확인을 다시 클릭하십시오.
  14. 저장을 클릭하십시오. 이것을 잊지 마십시오. 그렇지 않으면 변경 사항이 취소됩니다.
  15. 파일 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로 가져 오려면

  1. Windows 탐색기를 열고 cacerts 파일을 탐색하십시오.이 파일은 AX Core Client가 설치된 jre \ lib \ security 하위 폴더에 있습니다. 기본 위치는 C : \ Program Files \ ACL Software \ AX Core Client \ jre \ lib \ security입니다.
  2. 변경하기 전에 파일의 백업 사본을 작성하십시오.
  3. 사용중인 인증 기관에서받은 인증서에 따라 중간 인증서 및 / 또는 루트 인증서를 cacerts 파일로 가져와야 할 수 있습니다. 다음 구문을 사용하여 인증서를 가져 오십시오. keytool -import -alias -keystore -trustcacerts -file
  4. 두 인증서를 모두 가져 오는 경우 각 인증서에 지정된 별명이 고유해야합니다.
  5. “Password”프롬프트에서 키 저장소의 비밀번호를 입력하고 Enter를 누르십시오. cacerts 파일의 기본 Java 비밀번호는“changeit”입니다. “이 인증서를 신뢰 하시겠습니까?”에 ‘y’를 입력하십시오. 프롬프트하고 Enter를 누르십시오.

답변

간단한 명령 ‘keytool’은 Windows 및 / 또는 Cygwin에서도 작동합니다.

Cygwin을 사용하는 경우 여기에 “S.Botha ‘s”답변의 맨 아래에서 사용한 수정 된 명령이 있습니다.

  1. 사용할 JDK 내부의 JRE를 식별해야합니다.
  2. 관리자로 프롬프트 / cygwin을 시작하십시오
  3. 해당 JDK의 bin 디렉토리로 이동하십시오 (예 : cd / cygdrive / c / Program \ Files / Java / jdk1.8.0_121 / jre / bin).
  4. 내부에서 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전체 경로를 제공 작성하면 인증서를 넣을 곳을 솔직히 모른다