전체 인증서 체인과 개인 키가 포함된 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>
그리고 메모장을 사용하여 파일을 편집하여 원하지 않는 텍스트를 제거하세요. 우아하지 않나요? 예, 하지만 원하는 결과를 얻었습니다.