siklog
[NCP/Certificate Manager] 외부 SSL 인증서 등록 방법(feat. Let's Encrypt) 본문
지난 포스팅에서는 Let's Encrypt를 통해 무료인증서 발급받는 방법에 대해 작성하였다.
이번 포스팅에서는 발급받은 외부 인증서를 NCP Certificate Manager에 등록하는 절차에 대해 작성을 해보려고 한다.
* 본 포스팅은 Let's Encrypt를 기준으로 작성되었으며, 인증서에 따라 Root CA 및 Sub CA가 다르기에 다소 차이가 있을 수 있음.
0. 인증서 발급
당연하겠지만 Certificate Manager에 외부 인증서를 등록하려면 먼저 인증서를 발급받아야 한다.
유료인증서 또는 Let's Encrypt 같은 무료 인증서를 발급받아 주면 되며, Let's Encrypt 무료 인증서 발급 방법은 아래 내용을 참고하면 된다.
* Certificate Manager에서 사설 인증서는 등록할 수 없으며, 공인 Certificate Authority(이하 CA)에서 발급된 SSL 인증서만 등록할 수 있음.
1. 유효성 확인
Certificate Manager에 외부 인증서 등록 버튼을 누르면 Certificate 이름과 함께 아래 세 가지 인증키를 기입하여 유효성 체크를 하게된다.
- Private Key
- Certificate Body (구. Public Key Certficate 명칭만 변경됨)
- Certificate Chain
/etc/letsencrypt/archive/[인증서] 경로에서 발급받은 인증서를 보면 아래와 같이 4개의 파일이 생성되어 있는 것을 볼 수 있고, 각 pem파일의 구성 및 의미는 다음과 같다.
- cert1.pem : CA로부터 서명 받은 인증서(X.509 형식) 즉, 도메인의 인증서
- chain1.pem : Let’s encrypt의 Intermediate(중간 CA) 인증서
- fullchain1.pem : cert1.pem + chain1.pem combined
- privkey1.pem : 인증서의 개인키 즉, cert.pem publickey에 대응하는 비밀키
인증키를 발급받았지만, 위 인증키들을 Certificate Manager에 그대로 넣으면 유효성 에러가 발생한다.
이는 Intermediate CA 정보만 입력된 Chain이 발급되기 때문이며, 따라서 인증서가 사용하는 Root CA를 찾아 완벽한 Chain 관계를 만들어 Certificate Chain에 넣어주면 된다.
2. 인증서 등록
결과적으론 아래 형식대로 인증키를 등록하면된다.
- privkey1.pem -> Private Key
- cert1.pem -> Certificate Body
- Intermediate.pem+CA.pem (즉, Subscriber CA+Root CA) -> Certificate Chain
Let's Encrypt의 경우 아래 링크의 계층도를 참고하여 Certificate Chain을 생성하면된다.
https://letsencrypt.org/certificates/
여기서 주의할 점은 이전까진 [R3 -> DST Root CA X3]의 체인 구조로 DST Root CA X3를 Root CA로 사용하여 등록하거나 또는 [R3 -> ISRG Root X1 -> DST Root CA X3]의 체인 구조로 DST Root CA X3과 ISRG Root X1을 Cross Signing 인증하는 Certificate Chain 을 생성하여 등록할 수 있었으나 현재는 이와 같은 방식으로는 생성하여 등록할 수 없다.
그 이유는 Let's Encrypt에서 발급하는 인증서는, ISRG Root X1을 Root CA 목록에 가지고 있지 않은 오래된 버전의 플랫폼에서 Let's Encrypt 인증서를 신뢰할 수 있도록 DST Root CA X3의 교차 서명 역시 허용하고 있었으나, 2021/09/30을 기점으로 DST Root CA X3가 만료되었기 때문이다.
따라서, ISRG Root X1 만을 Root CA로 사용하여 Certificate Chain 을 만들어야 한다.
[R3 -> ISRG Root X1]
아래 명령을 실행해서 Certificate Manager에 기입해 주도록 한다.
* mac 환경에서는 Sub CA 및 Root CA를 추출할 수가 없어 R3(Sub CA)와 ISRG Root X1(Root CA)를 wget으로 따로 다운 받아 사용하였다.
# cat privkey1.pem
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
>> Private Key 부분에 등록
# cat cert1.pem
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
>> Certificate Body 부분에 등록
# wget https://letsencrypt.org/certs/lets-encrypt-r3.pem
# cp lets-encrypt-r3.pem Certificate_Chain_CA.pem
# wget https://letsencrypt.org/certs/isrgrootx1.pem
# cat isrgrootx1.pem >> Certificate_Chain_CA.pem
# cat Certificate_Chain_CA.pem
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
>> Certificate Chain 부분에 등록
* 만약 "wget" 명령어로 다운로드 진행 시 Proxy 보안이 되어있는 네트워크 환경이면 아래와 같은 에러 메시지가 발생할 경우가 있는데, 인증 과정을 생략해 주는 명령어를 통해 wget명령어가 작동하도록 하면 된다.
ERROR: cannot verify letsencrypt.org's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
Issued certificate has expired.
To connect to github..com insecurely, use `--no-check-certificate'.
# echo "check_certificate = off" >> ~/.wgetrc
3. 등록 확인
위 등록 과정 대로 진행하면 유효성 에러 없이 인증서가 정상적으로 등록되어 있는 것을 확인할 수 있다.
4. 다른 방법
참고로, cert.pem의 발행자는 R3로 중간 인증서에 해당하기에 chain.pem 파일에도 lets-encrypt-r3.pem가 존재한다.
따라서 굳이 lets-encrypt-r3.pem 파일을 wget 으로 다운 받을 필요는 없다. (chain.pem 파일의 첫 번째 부분이 R3)
윈도우 환경에서는 '인증서 내보내기 마법사'로 Sub CA 및 Root CA 추출하여 Certificate Chain 을 만들 수도 있다. 아래 가이드 참고
https://guide.ncloud-docs.com/docs/security-security-15-1
'클라우드 > NCP' 카테고리의 다른 글
[NCP/Containers] NKS 생성 및 접근 방법 (0) | 2022.05.17 |
---|---|
[NCP/Security] NCP CDN Security Token 발급 및 사용 방법 (0) | 2022.05.09 |
[NCP/Network] NCP Classic Load Balancer 에서 SSL Offloading 구성 (0) | 2022.04.09 |
[NCP/콘솔 사용법] Object Storage 특정 버킷에 대한 서브 계정 권한 설정방법 (0) | 2022.04.06 |
[NCP/Network] IPsec VPN을 이용한 NCP to AWS MultiCloud 구성 방법 (0) | 2022.04.03 |