개인 키를 사용하여 .pfx 파일을 키 저장소로 변환하는 방법은 무엇입니까?


107

Android 애플리케이션 ( .apk) 에 서명해야합니다 . 파일
.pfx있습니다. 나는 그것을 변환 .cer인터넷 익스플로러를 통해 파일 다음 변환 .cer.keystore키 도구를 사용하여. 그런 다음 .apkjarsigner 로 서명 을 시도했지만 .keystore가 개인 키를 만족하지 않는다고 말합니다.

내가 뭘 잘못하고 있니?


이 유용 할 수 있습니다 : I 찾아 윈도우 용 키 도구 실행할 수있는 stackoverflow.com/questions/5488339/...
피터 Barbanyaga

답변:


259

JDK 1.6 이상 사용

아래 주석에서 Justin은 keytool만으로 다음 명령을 사용하여이 작업을 수행 할 수 있다고 지적했습니다 (JDK 1.6 이상에서만 가능).

keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

JDK 1.5 이하 사용

OpenSSL은 모든 것을 할 수 있습니다. JGuru에 대한이 답변 은 지금까지 찾은 최고의 방법입니다.

먼저 OpenSSL이 설치되어 있는지 확인하십시오 . Mac OS X에서 찾은 것처럼 많은 운영 체제에 이미 설치되어 있습니다.

다음 두 명령은 pfx 파일을 Java PKCS12 키 저장소로 열 수있는 형식으로 변환합니다.

openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"

두 번째 명령에 제공된 이름은 새 키 저장소에있는 키의 별칭입니다.

다음 명령과 함께 Java keytool 유틸리티를 사용하여 키 저장소의 내용을 확인할 수 있습니다.

keytool -v -list -keystore mykeystore.p12 -storetype pkcs12

마지막으로 필요한 경우 위에서 만든 키 저장소를 새 키 저장소로 가져 와서이를 JKS 키 저장소로 변환 할 수 있습니다.

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS

28
세 단계에 대한 필요가 없습니다, 단지 실행 키 도구 -importkeystore -srckeystore mykeystore.pxf -destkeystore clientcert.jks -srcstoretype PKCS12 -deststoretype JKS
JustinMorris

이전 버전의 keytool에서는 그렇게 할 수 없다고 생각합니다. 8 년 전에는 openssl을 실행해야했지만 이제는 Oracle JDK 6 및 7의 keytool을 사용하여 Justin이 말한 것처럼 매력적으로 작동합니다.
David Brossard 2013 년

2
저스틴보다 1 년 전에 더 자세한 내용을 담은 더 간단한 형식으로 그 대답을주었습니다.
gjpc 2014 년

@gjpc 주목. 귀하의 답변은 매우 완전하며 많은 투표를받을 가치가 있습니다. :)
MikeD

이것은 정말 훌륭한 대답이며 며칠 동안 연구 한 후에 저를 구했습니다. 이 답변은 더 많은 찬성 투표를 할 가치가 있습니다. 감사합니다.
Mythul

22

jarsigner는 pfx 파일을 jar 서명을위한 키 저장소로 사용할 수 있습니다. 내보낼 때 pfx 파일에 개인 키와 인증서 체인이 있는지 확인하십시오. 다른 형식으로 변환 할 필요가 없습니다. 트릭은 pfx 파일 의 별칭 을 얻는 것 입니다.

 keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias

별칭이 있으면 서명이 쉽습니다.

jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"

위의 두 명령은 pfx 내보내기에서 지정한 암호를 입력하라는 메시지를 표시합니다. 암호를 일반 텍스트로 표시하려면 -keystore 스위치 앞에 -storepass 스위치를 사용하십시오.

서명이 완료되면 작업에 감탄하십시오.

jarsigner.exe -verify -verbose -certs  yourjarfile

1
+1 키 스토어 파일을 변환 할 필요가 없음 (이미 충분한 형식으로되어 있습니다!)
Trejkaz

22

PFX를 JKS (Java Key Store)로 가져 오는 방법을 알려주는 페이지를 찾았습니다 .

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME

3
이것이 완전한 대답이어야합니다!
JustAGuy

나는 이와 같은 대답을 찾고 있었다 – 별칭 이름
user3437460

한 가지 문제가 있습니다. pfx에는 암호가 없으므로 -srcstorepass내 문제입니다. 이 PFX는 Windows 용 LetsEncrypt 클라이언트에서 생성
FiruzzZ

2

PFX 파일에는 개인 키가 포함되어 있어야합니다. 개인 키와 인증서를 PFX 파일에서 직접 내보내고 (예 : OpenSSL 사용) Java 키 저장소로 가져옵니다.

편집하다

추가 정보 :

  • 여기 에서 Windows 용 OpenSSL을 다운로드 하십시오 .
  • 개인 키 내보내기 : openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • 수출 증명서 : openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • 을 사용하여 개인 키와 인증서를 Java 키 저장소로 가져옵니다 keytool.

keytool을 사용하여 key.pem 및 cert.pem을 어떻게 가져올 수 있는지 알려주시겠습니까?
Sad Al Abdullah

1
작은 추가 : 개인 ky를 내보낼 때 끝에
-nodes

2

Justin (위)은 정확합니다. 그러나 인증서를받는 사람 (중간 CA, 루트 CA 포함 여부) 또는 pfx 생성 / 내보내기 방법에 따라 때때로 인증서 체인이 누락 될 수 있습니다. 가져 오기 후에는 PrivateKeyEntry 유형의 인증서가 있지만 길이는 1입니다.

이를 해결하기 위해 몇 가지 옵션이 있습니다. 내 생각에 더 쉬운 옵션은 IE에서 pfx 파일을 가져오고 내보내는 것입니다 (체인에 모든 인증서 포함 옵션 선택). IE의 인증서 가져 오기 및 내보내기 프로세스는 매우 쉽고 다른 곳에서 잘 문서화되어야합니다.

내 보낸 후에는 Justin이 위에서 지적한대로 키 저장소를 가져옵니다. 이제 PrivateKeyEntry 유형의 인증서와 1보다 긴 인증서 체인 길이를 가진 키 저장소가 있습니다.

위의 작업을 수행하지 않으면 특정 .Net 기반 웹 서비스 클라이언트 오류가 발생합니다 (신뢰 관계를 설정할 수 없음).


이것은 IE11에서 작동하지 않는 것 같습니다. 내가 말했지만 인증서 체인을 포함하지 못했습니다. 나는 이것이 과거에 효과가 있다는 것을 알고 있습니다.
Brian Knoblauch

0

JDK 1.5 이하로 작업하는 경우 keytool 유틸리티에는 -importkeystore옵션 이 없으며 ( JDK 1.5 keytool 문서 참조 ) MikeD의 솔루션 .pfx은 최신 JDK (1.6 이상)가있는 시스템에서 를 전송해야만 사용할 수 있습니다 .

JDK 1.5 이하의 또 다른 옵션 (Oracle WebLogic 제품이있는 경우)은 Oracle 문서 인 Using PFX and PEM Certificate Formats with Keystores 의 지침을 따르는 것 입니다. .pem형식으로 의 변환 ,이 텍스트 형식에서 인증서 정보를 추출하는 방법, 유틸리티 .jksjava utils.ImportPrivateKey사용 하여 형식으로 가져 오는 방법에 대해 설명 합니다 (WebLogic 제품에 포함 된 유틸리티).

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