SSL 인증서에서 일련번호를 추출하는 방법

SSL 인증서에서 일련번호를 추출하는 방법

PEM 형식의 SSL 인증서에서 일련 번호를 추출하는 가장 좋은 방법이 무엇인지 알고 싶습니다.

그런 다음 인증서 형식을 다음과 같이 지정하고 싶습니다 hexhex:hexhex:...:hexhex . 예를 들어 SSL 인증서의 16진수 일련 번호가 다음과 같은 경우입니다.

0123456709AB

출력은 다음과 같아야합니다.

01:23:45:67:09:AB

선호하는 대로 openssl과 x509 옵션을 사용하여 한 줄의 UNIX 명령을 사용하여 이 작업을 수행하고 싶습니다.

답변1

노력하다:

openssl x509 -noout -serial -in cert.pem | cut -d'=' -f2 | sed 's/../&:/g;s/:$//'

openssl x509 -noout -serial -in cert.pem인증서의 일련번호가 출력되지만 형식은 serial=0123456709AB.

따라서 파이프를 통해 cut -d'=' -f2출력을 등호로 분할하고 두 번째 부분인 출력을 출력합니다 0123456709AB.

즉, sed명령 sed의 첫 번째 부분은 s/../&:/g문자열을 두 문자( ..)마다 분할하고 콜론( :)을 삽입합니다. 그 결과는 다음과 같습니다 01:23:45:67:89:AB:(끝 부분의 콜론에 주의).

명령의 두 번째 부분 sed( s/:$//)은 출력 끝에서 콜론을 검색하고 이를 빈 문자열로 대체하여 원하는 출력을 제공합니다.


또는 openssl독특한 sed답변:

openssl x509 -noout -serial -in test2.crt |  sed 's/.*=//g;s/../&:/g;s/:$//'

s/.*=//g명령 시작 부분에 추가된 항목 이 첫 번째 버전의 sed항목을 대체합니다 .cut

답변2

openssl x509 -noout -text -in [cert] 인증서에 대한 추가 정보를 제공합니다. 일련 번호만 원하는 경우 해당 일련 번호를 얻기 위해 grep을 사용할 수 있습니다.

... | grep -A1 "Serial Number"

그러면 다음과 같은 빌드 출력이 생성됩니다.

Serial Number:
            07:bf:0e:14:95:e7:1e:34:a2:b1:8b:df:ca:dd:ab:af:af:fb:50:fb

Serial Number:텍스트를 제거하려면tail -1

완전한 명령은 다음과 같습니다:

openssl x509 -noout -text -in [cert] | grep -A1 "Serial Number" | tail -1

관련 정보