.p7b 키를 .pfx로 변환


10

.pfx로 변환해야하는 .p7b 형식의 SSL 인증서가 있습니다. Windows 인증서 관리를 통해이 작업을 시도하면 .pfx로 전문가 옵션이 비활성화됩니다.

openssl을 사용하여 변환을 수행하는 다음 두 가지 명령을 찾았습니다.

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

그러나 esecond 명령에 사용할 키 또는 CACert.cer가 참조하는 인증서가 확실하지 않습니다.

이 키를 .pfx 형식으로 변환하려면 어떻게해야합니까?

답변:


20

PKCS # 7은 인증서 / 개인 키 쌍의 개인 (키) 부분을 포함하지 않으며, 일반적으로 인증서 배포에 사용됩니다 (예 : S / MIME 인증서를 배포하는 수단으로 PKCS # 10 인증서 요청에 대한 응답으로 사용) 메시지를 암호화하거나 서명 된 메시지의 유효성을 검사하는 데 사용됩니다). 정의에 따라 공용 항목 인 인증서에만 해당한다는 점을 명심해야합니다.

PKCS # 12는보다 보편적 인 컨테이너입니다. 개인 키와 공개 인증서 부분을 함께 저장하여 이동할 수 있습니다. 키를 약간 보호하기 위해 암호로 보호되는 기능이 있습니다.

PFX는 PKCS # 12의 전신입니다.

PKCS # 7에 모든 데이터가 없기 때문에 Anitak이 지적한대로 추가 데이터 (개인 키 부분)없이 PKCS # 7에서 PKCS # 12로 변환 할 수 없습니다.

Mark Sutton은 PFX로 내보낼 수없는 이유를 지적했습니다. 문제의 인증서에는 개인 키가 내보낼 수없는 것으로 표시되어 있습니다. CSP (Cryptographic Service Provider)는 해당 키를 이동할 수 없으며 이는 의도적 인 것입니다. 내보낼 수있는 인증서 \ 키 쌍을 얻을 수있는 유일한 방법은 원본 인증서가 내보내기 가능한 플래그 세트로 발행 된 경우입니다. 인증서와 관련된 개인 키가 없을 수도 있지만 여기서는 그렇지 않다고 가정합니다.

Wikipedia 에는 다양한 PKCS 유형이 요약되어 있습니다 .

  • 적어도 합법적 인 방법입니다. CSP \ Crypto 하드웨어에 따라, 특히 소프트웨어 전용 CSP에 대한 메커니즘이있을 수 있지만, 시스템 관리자가 아니라 내가 우려하는 한 보안 취약성 연구 영역입니다.

감사합니다. 새 인증서를 구매하는 것이 타사를 처리하는 데 걸리는 시간에 따라 복구하는 것보다 저렴할 수 있습니다.
DrStalker 2009

12

나는 2 년마다 (코드 서명 인증서를 갱신 할 때) 이것을 거치며 매번 고통 스럽습니다.

중요한 정보는 .p7b 파일의 이름을 .spc ( http://support.microsoft.com/kb/269395 ) 로 간단히 바꿀 수 있다는 것 입니다.

그런 다음 pvk2pfx.exe 도구를 사용하여 PVK + SPC를 PFX로 변환 할 수 있습니다.

pvk2pfx.exe -pvk input.pvk -pi <existing_input.pvk_password> -spc input.spc -pfx output.pfx -po <new_output.pfx_password>

(당신은 p7b 이름 바꾸기 단계를 건너 뛰고 직접 사용할 수 있습니다; 시도하지 않았습니다 ...)


이것은 허용 된 답변보다 훨씬 유용합니다. 난센스 서명 코드 상태에 놀랐습니다. 인증서가 만료되면 반복해서 반복해야한다는 생각에 울부 짖었습니다.
Tim

3

pfx 옵션이 비활성화 된 경우 windows 도구를 사용하면 개인 키를 로컬 저장소에서 내보낼 수 없습니다. 키가 생성 된 상자에 없기 때문에 키가 생성되지 않았거나 키를 생성 할 때 개인 키가 내보낼 수있는 것으로 표시되지 않았으며 Windows 인증서 템플릿이 내보내기를 허용하도록 구성되지 않았기 때문입니다.

Microsoft 인증 기관을 사용하여 인증서를 발급한다고 가정합니다. 이 올바른지?

그렇다면 :-

1. 인증서 템플릿이 개인 키 내보내기를 허용하는지 확인하십시오.
인증서 요청을 생성하는 방법은 다음과 같습니다.

다음과 같이 INF 파일 작성

[Version]
Signature = "$ Windows NT $

[NewRequest]
Subject ="etc "
KeySpec = 1
Exportable = 1
MachineKeySet = TRUE
ProviderName ="CSPName "
ProviderType = 1

[RequestAttributes] CertificateTemplate =

내보내기 가능 = 1 참고
그런 다음 명령 프롬프트에서 fllowing 명령을 사용하십시오.

infile.inf 위의 파일이고 reqfile 출력 요청 파일입니다 certreq -new infile.inf는 reqfile.req //

certreq -submit는 -config \ reqfile.req는 // 제출하는 CA에 인증서 요청

이 일단이 완료 당신은 것입니다 인증서를 pfx로 내보낼 수 있습니다.

또는 http://www.blacktipconsulting.com/Site/Products.html로 이동 하십시오 . 여기서이 모든 작업을 수행하는 무료 명령 줄 도구를 넣고 인증서가 완료되면 pfx로 인증서를 내 보냅니다.


2

Helvick이 지적했듯이 PKCS10의 응답은 PKCS7이며 개인 키를 포함하지 않습니다. 따라서 CSR을 생성하는 동안 privatekey.key 파일을 생성해야합니다. 다음 명령을 사용할 수 있습니다. (이것은 4 살짜리 질문이라는 것을 알고 있지만 페이지의 토론을 따르는 동안에는 할 수 없었습니다).

openssl pkcs7 -inform DER -in PK7BDownloadedArchive.p7b -text -print_certs -out intermediateCert.pem

openssl pkcs12 -export -in intermediateCert.pem -inkey privateKey.key -out FinalPKCS12Cert.p12

행운을 빕니다!

감사합니다, JE


당신은 -inform논쟁이 필요하지 않을 수도 있습니다 .
palswim

1

틀릴 수도 있지만 PCKCS # 7 파일에는 인증서의 공개 절반 만 포함되어 있다고 생각합니다.

PKCS # 12 파일에는 두 부분이 모두 필요하므로 -inkey옵션 이 필요한 이유는 무엇입니까 ?

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