PEM 인증서 체인 및 키를 Java Keystore로 가져 오기


29

이 주제에 대한 많은 자료가 있지만이 특별한 사례를 다루는 것은 없습니다.

4 개의 파일이 있습니다.

  • privatekey.pem
  • certificate.pem
  • intermediate_rapidssl.pem
  • ca_geotrust_global.pem

그리고 그것들을 새로운 키 저장소로 가져오고 싶습니다.

일부 사이트에서는 DER 형식을 사용하여 하나씩 가져 오는 것이 좋지만 키가 인식되지 않아 실패했습니다.

다른 사이트는 가져 오기 위해 실행할 특별한 "ImportKey"클래스를 제안했으며, 체인이 끊어 질 때까지 작동했습니다. 즉, 인증서의 체인 길이는 1이며 중간 및 ca는 무시합니다.

일부 사이트는 PKCS7을 제안하지만 그로부터 체인을 얻을 수도 없습니다. 다른 사람은 PKCS12 형식을 제안하지만 테스트가 진행되는 한 전체 체인을 얻는 데 실패했습니다.

어떤 조언이나 힌트도 환영합니다.

답변:


26

이것은 완벽하지는 않지만 keytool시나리오에 맞게 수정 한 것에 대한 참고 사항이 있습니다.

  1. 루트 또는 중간 CA 인증서를 기존 Java 키 저장소로 가져 오십시오.

    keytool -import -trustcacerts -alias root -file ca_geotrust_global.pem -keystore yourkeystore.jks
    keytool -import -trustcacerts -alias root -file intermediate_rapidssl.pem -keystore yourkeystore.jks 
    
  2. 가져 오기 전에 인증서와 개인 키를 하나의 파일로 결합하십시오.

    cat certificate.pem privatekey.pem > combined.pem
    

    파일 형식은 아래와 같습니다.

    인증 시작
    ... 인증서
    종료
    RSA 개인 키 시작
    ...
    RSA 개인 키 종료

  3. 서명 된 기본 인증서 및 키를 기존 Java 키 저장소로 가져 오십시오.

    keytool -import -trustcacerts -alias yourdomain -file combined.pem -keystore yourkeystore.jks
    

2
어떤 키툴 버전으로 체인을 연결할 수 있습니까? 이 구문은 "keytool 오류 : java.lang.Exception : 인증서를 가져 오지 못하고 별명 <root>이 (가) 이미 존재합니다"를 제공합니다. -import 및 -importcert
ctpenrose

정확히 말하기 어렵다. 그러나 년 / 월을 감안할 때 Java 6 일 가능성이 있습니까? (부 버전은 전혀 모르겠습니다.) 어떤 버전을 사용하고 있습니까? 키 저장소 자체에 문제가있는 것처럼 오류가 읽 힙니다. ( alias <root> already exists) 비어있는 새 키 저장소로 시도 할 수 있습니까?
Aaron Copley 2014

1
Keytool에서 기존 별칭 'root'를 사용하여 인증서를 가져올 수 없습니다. 그러나 나는 그것이 오타라고 생각합니다. keytool이 키 저장소에서 (별명으로) 서명자의 인증서를 찾으면 인증서 자체에 대한 체인을 작성한다는 점에 주목하십시오. Java 도구 "Portecle" 은 Java 키 저장소를 관리하는 데 편리합니다.
Houtman

Keytool은 이와 같이 작동하지 않으며 설명에 따라 별칭을 두 번 이상 가져올 수 없습니다. (그렇습니다, 시도했습니다). 제대로 작동하는 부분에 대해서는 아래의 senajqerib의 답변을 참조하십시오.
Steve

1
세 살짜리 답입니다. 변경 사항은 전적으로 가능하지만 2013 년 2 월 기준으로 작동했거나 완벽하지 않을 수 있으므로 작업에 가까웠다 고 확신합니다. 편집자에게 의견을 보내거나 검토를 위해 플래그를 지정하십시오.
Aaron Copley

42

all.pem과 같이 모든 * .pem 파일을 하나의 pem 파일로 연결 한 다음 개인 키 + all.pem을 사용하여 p12 형식의 키 저장소를 작성하십시오.

openssl pkcs12 -export -inkey private.key -in all.pem -name test -out test.p12

그런 다음 p12를 jks로 내보내십시오.

keytool -importkeystore -srckeystore test.p12 -srcstoretype pkcs12 -destkeystore test.jks

고맙습니다. 이것은 유일하고 완전한 정답입니다. 제안한 것처럼 인증서를 하나의 파일로 함께 연결하는 것이 훨씬 쉽습니다.
Steve

이것은 나를위한 대접처럼 일했다!! 이 지침을 사용하여 nodejs-self-signed-certificate-example 저장소에 사용 된 일련의 키를 Java 기반 TLS 서버와 통신하도록 변환했습니다. 정말 고마워!
Galder Zamarreño

이것이 정답입니다.
sfThomas 2016 년

8

keytool은 위에서 제안한대로 단일 (결합 된) 파일에서 인증서 + 개인 키를 가져 오는 방법을 제공하지 않습니다. 제대로 실행되지만 인증서 만 가져오고 개인 키는 무시됩니다. 다음과 같은 방법으로 그것을 확인할 수 있습니다 keytool -list -v -keystore yourkeystore.jks- 사용자 도메인 항목 유형은 PrivateKeyEntry를하는 trustedCertEntry 없습니다.

따라서 초기 문제를 해결하려면 먼저 openssl (또는 유사한 도구)을 사용하여 PKCS # 12 키 저장소를 만든 다음로 키 저장소를 가져와야합니다 keytool -importkeystore.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.