단일 명령을 사용하여 인증서 체인의 모든 인증서를 별도의 .crt 파일로 내보내는 방법

단일 명령을 사용하여 인증서 체인의 모든 인증서를 별도의 .crt 파일로 내보내는 방법

.crt단일 명령을 사용하여 인증서 체인의 모든 인증서를 별도의 파일로 내보내고 싶습니다 . 어떻게 해야 하나요?

몇 가지 배경 정보를 제공하려면:

  1. opensslbash 유틸리티를 사용하고 싶습니다 .(openssl s_client -showcerts -connect <host>:<port> & sleep 4)
  2. 위의 명령가능한여러 인증서를 인쇄합니다. 즉, 다음 패턴으로 여러 문자열을 인쇄할 수 있습니다: -----BEGIN CERTIFICATE-----base64로 인코딩된 X.509 인증서 -----END CERTIFICATE-----. 예를 들어:

    -----BEGIN CERTIFICATE-----
    MIIFNzCCAx+gAwIBAgITUwAAAAJpqCKn3YTQ6gAAAAAAAjANBgkqhkiG9w0BAQsF...
    -----END CERTIFICATE-----
    
  3. 파일의 내용은 .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

관련 정보