.crt
단일 명령을 사용하여 인증서 체인의 모든 인증서를 별도의 파일로 내보내고 싶습니다 . 어떻게 해야 하나요?
몇 가지 배경 정보를 제공하려면:
openssl
bash 유틸리티를 사용하고 싶습니다 .(openssl s_client -showcerts -connect <host>:<port> & sleep 4)
위의 명령가능한여러 인증서를 인쇄합니다. 즉, 다음 패턴으로 여러 문자열을 인쇄할 수 있습니다:
-----BEGIN CERTIFICATE-----
base64로 인코딩된 X.509 인증서-----END CERTIFICATE-----
. 예를 들어:-----BEGIN CERTIFICATE----- MIIFNzCCAx+gAwIBAgITUwAAAAJpqCKn3YTQ6gAAAAAAAjANBgkqhkiG9w0BAQsF... -----END CERTIFICATE-----
파일의 내용은
.crt
레이블을 포함하여 인쇄된 base64로 인코딩된 인증서와 동일해야 합니다.
답변1
파이프를 통해 들어가세요awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print > "cert-" i ".crt" }'
예를 들어:
echo "" |
openssl s_client -showcerts -connect www.example.com:443 |
awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print > "cert-" i ".crt" }'
답변2
awk
이 문제를 해결하는 데 사용할 수 있는 것으로 나타났습니다 .
(openssl s_client -showcerts -connect <host>:<port> & sleep 4) | awk '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/{if(/-----BEGIN CERTIFICATE-----/){a++}; out="/tmp/<host>"a".crt"; print > out}'
<host>
및 <port>
실제 값으로 바꾸십시오 . 이 명령의 기능 은 명령의 시간 초과 기간을 sleep
제한하는 것입니다 .openssl