Browsing Tag

tls

미분류

[NCP] Let’s Encrypt + Certificate Manager로 Load Balancer에 인증서 적용하기

안녕하세요. ManVSCloud 김수현입니다.

오늘은 네이버 클라우드 사용 시 Load Balancer에 Certificate Manager에 등록한 SSL 인증서를 적용하는 방법을 알려드리려 합니다.

물론 아시다시피 SSL 인증서의 경우 발급 기관에서 비용을 주고 구매하여 사용하는 것이 일반적입니다. 그러므로 이번 포스팅에서 Let’s Encrypt를 이용하여 SSL 인증서를 무료로 발급받아 적용하는 방법으로 포스팅을 진행하였으며 전체적인 글의 양이 많아 어느 정도 추가하고자 하는 정보들은 외부 사이트 링크로 대체하였습니다.


Let’s Encrypt

https://letsencrypt.org/ko/

Let’s Encrypt는 무료로 SSL/TLS 인증서를 발급 및 갱신할 수 있는 글로벌 공인인증기관(Certificate Authority, CA)입니다.
또한 Let’s Encrypt는 비영리기관이며 DV(Domain Validation) 인증서만 제공하고 있습니다.

그럼 이제 Let’s Encrypt 설치 및 발급을 진행해보도록 하겠습니다.
(설치 환경은 Naver Cloud Platform의 CentOS 7 입니다.)

[root@manvscloud-web-pub-kr1 ~]# yum install certbot -y

Let’s Encrypt는 yum으로도 설치가 가능하며 snap으로 설치하는 방법도 있습니다.
이번 포스팅에서는 yum으로 간단하게 설치할 것이며 snap 설치 방법은 댓글로 남겨두도록 하겠습니다.

[root@manvscloud-web-pub-kr1 ~]# certbot certonly --manual -d *.newreka.co.kr -d newreka.co.kr --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Requesting a certificate for *.newreka.co.kr and newreka.co.kr
Performing the following challenges:
dns-01 challenge for newreka.co.kr

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.newreka.co.kr with the following value:

Q5cYPi74WnFHndsTwT9UKNp38JSdUQ2bkYTXhApHuME

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

yum으로 설치가 끝나면 certbot 명령어를 이용하여 인증서 발급이 가능합니다.
다양한 인증 방법이 존재하지만 저는 DNS 인증을 이용하여 발급했습니다.
(Apache나 Nginx를 이용한 Web 인증 방법 : certbot –nginx certonly -d manvscloud.com, certbot –apache certonly -d manvscloud.com)

위와 같이 certbot certonly –manual -d *.newreka.co.kr -d newreka.co.kr –preferred-challenges dns-01 –server https://acme-v02.api.letsencrypt.org/directory 명령어를 입력하면 DNS 인증 및 와일드카드 인증서 발급이 가능합니다.

이후 “Please deploy a DNS TXT record under the name” 아래 나오는 값을 해당 도메인의 네임서버에 아래 사진과 같이 추가해줍니다. (TXT Record 입니다.)

Naver Cloud Platform Global DNS

해당 레코드 값이 정상적으로 잘 등록되었다면 아래와 같이 정상적으로 발급될 것입니다.
정상적으로 발급되지 않는다면 해외 차단이 되어있지 않은지, 정상적으로 TXT 조회가 가능한지, 서버의 웹 포트가 차단되어있지 않은지 확인이 필요합니다.

Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/newreka.co.kr/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/newreka.co.kr/privkey.pem
   Your certificate will expire on 2022-03-05. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

다음과 같이 /etc/letsencrypt/archive 경로로 이동하면 위에서 생성한 도메인에 대한 디렉토리 및 생성된 인증서를 확인할 수 있습니다.

[root@manvscloud-web-pub-kr1 archive]# cd /etc/letsencrypt/archive
[root@manvscloud-web-pub-kr1 archive]# ll
total 4
drwxr-xr-x 2 root root   83 Dec  6 03:17 newreka.co.kr
[root@manvscloud-web-pub-kr1 archive]# cd newreka.co.kr
[root@manvscloud-web-pub-kr1 newreka.co.kr]# ll
total 20
-rw-r--r-- 1 root root 1862 Dec  6 03:17 cert1.pem
-rw-r--r-- 1 root root 3749 Dec  6 03:17 chain1.pem
-rw-r--r-- 1 root root 5611 Dec  6 03:17 fullchain1.pem
-rw------- 1 root root 1704 Dec  6 03:17 privkey1.pem

2021-09-30일 이전에는 아래와 같이 DST Root CA X3 루트 인증서를 받아 추가해주는 방식을 이용했었는데 올해 9월 30일 이후부터 해당 루트 인증서는 만료되어 더 이상 Let’s Encrypt에서 사용할 수 없게 되었습니다.
(ISRG Root X1 인증서를 사용해야합니다.)

wget http://apps.identrust.com/roots/dstrootcax3.p7c
openssl pkcs7 -inform der -in dstrootcax3.p7c -out dstrootcax3.pem -print_certs
cat dstrootcax3.pem >> fullchain1.pem

그렇다면 위에 생성된 cert1.pem, chain1.pem, fullchain1.pem, privkey1.pem 파일을 이용하여 네이버 클라우드의 Certificate Manage 서비스에 인증서를 등록하면 정상적으로 등록이 되느냐?

그렇지않습니다.
그러므로 cert1.pem 인증서로 부터 루트 인증서와 중간 인증서를 생성하고 체인 인증서를 만드는 방법을 알려드릴 것입니다.

[root@manvscloud-web-pub-kr1 newreka.co.kr]# sz cert1.pem

우선 sz 명령어로 인증서 파일을 윈도우로 옮겨줍시다.
해당 명령어가 되지 않으면 yum install lrzsz 로 설치를 하거나 ftp 등 원하시는 방법으로 인증서를 이동시켜줍니다.

가져온 cert1.pem 파일을 아래와 같이 .crt 파일로 변경하여 인증서 정보를 확인합시다.

인증서 파일을 실행하여 [인증 경로]를 클릭하면 인증 경로에서 가장 최상단에 있는 ISRG Root X1가 루트 인증서입니다.
해당 루트 인증서를 클릭하고 [인증서 보기]를 클릭해줍니다.

루트 인증서에 대한 인증서 보기를 클릭한 뒤 [자세히] 부분을 클릭하면 아래와 같이 [파일에 복사] 버튼이 있어 이를 이용하여 외부로 루트 인증서를 따로 빼낼 수 있습니다.

아래 이미지만 잘 보고 따라 생성해주세요.

위 이미지를 잘 따라 오셨다면 ISRG Root X1 루트 인증서가 정상적으로 생성되었을 것입니다.

자, 이제 중간(Intermediate) 인증서를 생성할 것입니다.
인증 경로에서 두번째에 있는 인증서가 중간 인증서입니다.

방법은 위에서 했던 루트 인증서를 가져오는 방법과 동일합니다.
동일하게 아래 이미지를 그대로 따라가시면 됩니다.

위 이미지를 잘 따라오셨다면 루트 인증서와 중간 인증서가 잘 생성되어있을 것입니다.
이제 인증서들의 확장자를 .pem로 다시 변경해줍니다.

그리고 Intermediate.pem 인증서안에 CA.pem 인증서의 내용을 추가해줍니다.
리눅스 명령어로 치면 cat CA.pem >> Intermediate.pem 입니다.

chain.pem 파일을 생성하고 Intermediate.pem+CA.pem 순서대로 따로 생성하셔도 됩니다.


Certificate Manager

이제 네이버 클라우드 Certificate Manager에 위에서 생성한 인증서들을 등록해줄 것입니다.

등록할 인증서는 총 3가지 입니다.

======================
privkey1.pem
cert1.pem
chain.pem (Intermediate.pem+CA.pem)
======================

위 세 가지 인증서가 잘 준비되셨으면 아래로 넘어갑시다.

Certificate Manager

Certificate Manager에 등록할 이름을 정해주고 위에서부터 privkey1.pem, cert1.pem, chain.pem (Intermediate.pem+CA.pem) 순서대로 넣어줍니다.

Private Key = privkey1.pem
Certificate Body = cert1.pem
Certificate Chain = chain.pem (Intermediate.pem+CA.pem)

등록 후 [추가]를 클릭하면 아래 사진과 같이 정상적으로 인증서가 추가됩니다.


Applied to Load Balancer

이제 Certificate Manager에 등록한 인증서를 Load Balancer에 추가 해봅시다.

  • Target Group
    먼저 Target Group을 생성해줍니다.
    Application Load Balancer로 만들 것이기때문에 프로토콜은 HTTP로 해주겠습니다.

Target 서버는 당연히 웹 서버로 해야겠죠?

  • Load Balancer

이제 로드밸런서를 생성해줍시다.
애플리케이션 로드밸런서로 생성해주겠습니다.

443 포트를 추가하면 인증서를 선택하여 넣어줄 수 있습니다.

SSL Certificate 선택에서 Certificate Manager에 등록한 인증서를 선택해줍니다.
그리고 TLS 최소 지원 버전 및 Cipher Suite를 선택해준 뒤 [다음]으로 넘어갑니다.

위에서 생성한 Target Group 추가ㅇㅇ우위윙위에ㅇ

잘 따라오셨다면 이제 “LET’S ENCRYPT + CERTIFICATE MANAGER로 LOAD BALANCER에 인증서 적용하기”를 마스터 하셨습니다.


Personal Comments

이번 포스팅은 쓰다보니 상당히 이미지가 많아서 전체적인 글이 길어졌네요.
그래도 이렇게 이미지를 많이써야 처음 사용해보시는 분들이 쉽게 접근하실 수 있다고 생각하여 작업 하나 하나마다 스크린샷을 찍어서 이미지 업로드를 준비하고 있습니다.

“LET’S ENCRYPT + CERTIFICATE MANAGER로 LOAD BALANCER에 인증서 적용” 이제는 너무 쉽다고 느껴지지않나요?
많은 도움이 되셨길 바랍니다.

긴 글 읽어주셔서 감사합니다.