패키지 속성 없이 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>

이것은 잘 작동하지만 출력에 패키지 속성이 포함되어 있고 애플리케이션은 이를 어떻게 해야할지 모릅니다.

검색을 한 후 x509를 통해 결과를 전달하여 패키지 속성을 제거하는 제안된 솔루션을 찾았습니다.

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

작동하지만 cacert 파일에 문제가 있습니다. 출력 파일에는 체인의 인증서 3개 중 하나만 포함됩니다.

pkcs12 명령 출력에 패키지 속성을 포함하지 않거나 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>

그리고 메모장을 사용하여 파일을 편집하여 원하지 않는 텍스트를 제거하세요. 우아하지 않나요? 예, 하지만 원하는 결과를 얻었습니다.

관련 정보