백 속성 없이 PFX에서 CA 인증서 체인을 PEM 형식으로 내보내는 방법

백 속성 없이 PFX에서 CA 인증서 체인을 PEM 형식으로 내보내는 방법

전체 인증서 체인과 개인 키가 포함된 PKCS12 파일이 있습니다. 응용 프로그램을 위해 3개의 파일로 나누어야 합니다. 필요한 파일 3개는 다음과 같습니다(PEM 형식).

  • 암호화되지 않은 키 파일
  • 클라이언트 인증서 파일
  • CA 인증서 파일(루트 및 모든 중간)

이는 제가 수행해야 하는 일반적인 작업이므로 출력을 수동으로 편집하지 않고도 이 작업을 수행할 수 있는 방법을 찾고 있습니다.

나는 다음을 시도했다:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain -out <cacerts.cer>

이것은 잘 작동하지만 출력에는 애플리케이션이 처리하는 방법을 모르는 bag 속성이 포함되어 있습니다.

몇 가지 검색 끝에 x509를 통해 결과를 전달하여 가방 속성을 제거하는 제안된 솔루션을 찾았습니다.

openssl x509 -in <clientcert.cer> -out <clientcert.cer>

이것은 작동하지만 cacert 파일에 문제가 발생합니다. 출력 파일에는 체인의 3개 인증서 중 하나만 포함됩니다.

pkcs12 명령 출력에 bag 속성이 포함되지 않도록 하는 방법이 있습니까? 아니면 x509 명령 출력에 모든 인증서가 포함되도록 하는 방법이 있습니까? 또한 x509를 통해 실행하는 것이 가장 간단한 솔루션인 경우 파일을 두 번 쓰는 대신 pkcs12의 출력을 x509로 파이프하는 방법이 있습니까?

답변1

마침내 내가 찾은 해결책은 sed를 통해 파이프하는 것이었습니다.

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>

답변2

없는 또 다른 솔루션 sed:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | openssl pkcs8 -nocrypt -out <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | openssl x509 -out <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | openssl x509 -out <cacerts.cer>

답변3

다음을 포함하는 싱글라이너 awk:

openssl pkcs12 -in key.pfx -nodes -out - | awk '/-----BEGIN/{a=1}/-----END/{print;a=0}a'

이렇게 하면 PEM 시작 줄과 끝 줄 사이가 아닌 모든 출력이 삭제됩니다. AWK에 대한 크레딧은 다음과 같습니다.https://stackoverflow.com/q/17988756#comment29487454_17988834

답변4

방금 사용해 보았습니다.

openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | openssl x509 -out <cacerts.cer>

체인의 각 항목에 대한 헤더 없이 일반 형식으로 체인을 내보냅니다. 이 Windows NT 서버에서는 내보낸 체인의 첫 번째 항목만 얻었고 예상한 두 항목은 얻지 못했습니다. 대신에 그냥 사용하게 됐어요

openssl pkcs12 -in <filename.pfx> -cacerts -chain -nokeys -nodes -out <cacerts.cer>

원하지 않는 텍스트를 제거하려면 메모장으로 파일을 편집하세요. 우아하지 않은가? 예, 하지만 필요한 결과를 얻었습니다.

관련 정보