본문 바로가기
Programming/OpenSSL

[OpenSSL] Let's Encrypt 인증서(Certificate) Chain verify 방법

by 붕어고기 2020. 5. 7.
반응형

요약

  1. openssl verify 는 Root CA 정보가 포함된 Chain에 대해서 검증합니다.
  2. Let's Encrypt 는 Root CA 정보가 누락된 Chain이 발급되므로, Root CA를 따로 넣어줘야 합니다.
    1. Root CA 다운로드
    2. PEM 형식 변환
    3. Root CA 포함된 Chain 생성
    4. Chain 검증

보유한 도메인에 무료로 인증서를 붙일 수 있는 Let's Encrypt를 개발하시는 분들은 많이 사용하실 것으로 생각됩니다.

오늘은 Let's Encrypt 의 Chain verify 관련해서 포스팅을 해보겠습니다.

 

Let's Encrypt 로고

 

Let's Encrypt는 certbot을 통해 인증서를 신규 발급하고, 갱신할 수 있습니다.

certbot의 사용법은 공식 홈페이지를 통해 확인할 수 있으며, 신규 발급과 설정은 다른 포스팅으로 찾아 뵙겠습니다. : )

 

우선, certbot을 사용하여 신규 / 갱신 작업을 완료할 경우, 총 4개의 파일이 생성됩니다.

  1. cert.pem
  2. chain.pem
  3. fullchain.pem
  4. privkey.pem

아래의 커맨드를 통해 subject와 issuer를 확인할 수 있습니다.

$ openssl x509 -noout -in chain.pem -subject -issuer

subject= /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
issuer= /O=Digital Signature Trust Co./CN=DST Root CA X3

 

인증서 Chain 관계를 파악하기 위해선 아래와 같은 커멘드를 사용하여 확인할 수 있습니다.

$ openssl verify -CAfile chain.pem cert.pem

cert.pem: OK

 

다만, Let's Encrypt 의 경우 아래와 같이 에러가 발생하는데, 이는 Intermediate CA 정보만 입력된 Chain이 발급되기 때문입니다.

cert.pem: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
error 2 at 1 depth lookup:unable to get issuer certificate

 

이를 해결하는 방법은 2가지가 존재합니다.

  1. -untrusted 인자 전달
  2. Root CA 추가

1번 방법의 경우, 임시적으로 -untrusted 인자를 넣어 검증하는 방법입니다.

$ openssl verify -untrusted chain.pem cert.pem

cert.pem: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
error 2 at 1 depth lookup:unable to get issuer certificate
OK

 

이는 임시방편이며, 실제 검증 기능을 서비스에 추가할 경우에는 2번 Root CA 추가하는 방법을 권합니다.

 

2번 방법의 경우, Let's Encrypt 가 사용하는 Root CA를 찾아 완벽한 Chain 관계를 만들어 주면 됩니다.

Let's Encrypt 는 DST Root CA X3 를 Root CA로 사용합니다.

 

우선, 1) Root CA를 다운로드 하고

wget http://apps.identrust.com/roots/dstrootcax3.p7c

 

2) PEM 형식으로 변환을 합니다.

$ openssl pkcs7 -inform der -in dstrootcax3.p7c -out dstrootcax3.pem -print_certs

 

그리고 3) Root CA가 포함된 Chain을 생성하고,

$ cp fullchain.pem fullca.pem
$ cat dstrootcax3.pem >> fullca.pem

 

4) Chain verification을 진행합니다.

openssl verify -CAfile fullca.pem cert.pem

cert.pem: OK

 

진행하시다가 궁금하신 사항은 편하게 댓글 남겨주세요 :)

확인 후 답변 드리겠습니다.

반응형

댓글