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

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

내가 뭘 잘못하고 있니?



답변

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


답변

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


답변

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


답변

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.

답변

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

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

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

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


답변

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 제품에 포함 된 유틸리티).


답변