Notice
Recent Posts
Recent Comments
Link
Archives
Today
Total
관리 메뉴

윤서율의 블로그

[Ncloud] 무료 인증서로 SSL 적용하기(Feat. Certificate Manager와 Load Balancer) 본문

Cloud

[Ncloud] 무료 인증서로 SSL 적용하기(Feat. Certificate Manager와 Load Balancer)

Yoon Seo-yul 2023. 8. 29. 03:48

인증서는 왜 필요할까?

결론부터 말해서 웹 통신에서 인증서는 내가 보내는 메시지를 안전하게 목적지(상대방)에 보내고 악의적인 사용자에게 잘못 배송되더라도 내용을 숨겨서 최대의 피해를 방지하고자 사용한다.

이를 위한 방법으로 암호화가 있는데, 대칭키 암호화 방식과 비대칭키 암호화 방식을 주로 사용된다. 또한, 통신에 있어서 상호 상대방이 누군지를 알아야 할 필요가 있는데 이를 보장해주는 개체로 CA기관이 존재한다.

*CA / 인증 기관 (certificate authority)

인증서 웹사이트에 적용하기

먼저, 아파치를 이용하여 웹서버를 띄워보고, 무료 인증서를 발급받아 SSL을 적용해본다. 이어서 네이버 클라우드 플랫폼의 Certificate Manager를 이용하여 손쉬운 인증서 관리 방법을 알아보고 실제로 Application Load Balancer에 적용해보겠다.

실습을 진행하기 위해서 사용되는 도구는 아래와 같다.

- 웹서버: apache2

- SSL: openssl

- 인증서: certbot

certbot으로 인증서를 발급받아 아파치 웹 서버에 적용하기

인증서 발급 받기

*네이버 클라우드 플랫폼에서 server를 이용하여 ubuntu 를 기동하였습니다.

# 애플리케이션을 이용하여 무료 인증서를 받는 방법을 사용한다.
# 이를 위하여 certbot을 설치한다.
apt install certbot
certbot certonly

# 인증서 발급 과정에서는 웹서버를 이용하기 때문에 엔진엑스나 아파치같은 서버가 이미 떠있는 경우,
# 포트 등 문제로 정상적으로 진행이 되지 않는다.

cd /etc/letsencrypt/archive/자신의도메인

# 아래 스크린샷과 같이 자신의 도메인에 대하여 인증서를 발급 받아 확인한다.
# 필자의 경우 아래와 같다.
# /etc/letsencrypt/archive/ncloud.cloudev.kr
# cert1.pem  chain1.pem  fullchain1.pem  privkey1.pem

- certbot certonly 명령어로 실행 후, 나오는 내용에 따라 진행한다.

- 발급 성공

발급 성공 시 안내 문구에 나오는 파일 디렉토리에서 아래와 같이 인증서 pem 파일들을 확인할 수 있다.

아파치 서버 설치 및 인증서 적용

apt install apache2
apt install openssl

# 아래 명령어로 아파치에 ssl 모듈을 올려준다.
a2emod ssl

# 아파치 설정 파일에 ssl 인증서를 구성한다.
# /etc/letsencrypt 아래에 있는 인증서 경로를 기억해두었다가 각 항목에 맞게 변경한다.
# 예시
# /etc/letsencrypt/archive/ncloud.cloudev.kr/cert1.pem
# /etc/letsencrypt/archive/ncloud.cloudev.kr/privkey1.pem
# /etc/letsencrypt/archive/ncloud.cloudev.kr/fullchain1.pem

# vi를 이용하여 편집하는 방법
cd /etc/apache2/sites-available
vi default-ssl.conf

필자는 다음과 같이 변경하였다.
# SSLCertificateFiole 에 cert1.pem
# SSLCertificateKeyFile 에 privkey1.pem
# SSLCertificateChainFile 에 fullchain1.pem

# ssl 적용
a2ensite
default-ssl

# 아파치 재기동
systemctl reload apache2

ㄴ위 과정을 따라서 아파치 서버에 인증서를 수동으로 적용할 수 있다.

잘 적용 되었다면 해당 주소로 https 접속을 하고, 주소 표시줄에서 URL의 가장 왼쪽에 자물쇠 아이콘을 클릭하여 인증서가 적용된 모습을 확인할 수 있다.

Certificate Manager 적용하기

네이버 클라우드 플랫폼 서비스를 사용하면 인증서를 손쉽게 적용할 수 있도록 Certificate Manager을 지원하고 있다.

Certificate Manager 란?

Certificate Manager는 네이버클라우드 플래폼에서 제공하는 인증서를 쉽게 등록하고 관리할 수 있는 서비스로 무료 서비스로 제공한다.

다른 연동서비스에 사용할 SSL 인증서 등록과 관리를 통합하여 제공하는 서비스로 통합 인증서 등록, 인증서 만료 알림, 인증서 정보 제공 서비스를 한다. 함께 연동되는 서비스로는 Load Balancer, CDN+, Global Edge 가 있다.

왜 Certificate Manager를 이용하는가? (서버에 인증서 설치 시 문제점)

서버에 인증서를 직접 설치했을때 문제점으로 3가지를 꼽을 수 있다. 먼저, 통신시 암호화 복호화에 따른 CPU 리소스 소모가 발생하여 웹서버에서 본래의 목적과 다른 부가적인 리소스 이슈가 발생한다.

다음으로, 로드밸런서 사용 시 발생하는 이슈로, 오토스케일링과 같이 동적으로 서버가 변하는 경우 인증서에 대한 추가적인 설정이 필요하게 된다. 마지막으로 관리의 문제점이 발생한다. 인증서가 만료되면 서비스 접근이 불가능하기 때문에 인증서에대한 추적 관리가 필수 적이다.

이러한 세 가지 문제점을 손쉽게 해결해주는 서비스가 Certificate Manager라고 할 수 있다.

Certificate Manager 이용 방법

네이버 클라우드 플랫폼 콘솔에 접속하여 Certificate Manager를 검색하고 이용을 신청한다.

Certificate Manager 페이지에 접속하여 왼쪽 상단 파란색 외부 인증서 등록 버튼을 눌러 손쉽게 외부에서 발급한 인증서를 등록할 수 있다.

위와 같은 화면이 나타나면 이제 인증서 발급 단계에서 확인했던 pem 파일의 내용을 복사하여 붙여넣는다.

필자의 디렉토리는 다음과 같다.

/etc/letsencrypt/archive/ncloud.cloudev.kr

  • Private Key에는 cat privkey1.pem 명령어로 확인할 수 있는 내용을 입력한다.
  • Certificate Body에는 cat cert1.pem 명령어로 확인할 수 있는 내용을 입력한다.
  • Certificate  Chain의 경우 렛츠인크립트를 통해 발급 받은 무료 인증서의 경우 조금 번거로운 작업을 거친다.
    • 렛츠인크립트의 경우 fullchain.pem 에 루트 인증서의 pem를 포함하지 않고 있다. 때문에 직접 루트 CA의 pem를 확인해줘야 한다. openssl을 설치한 경우, 혹은 이미 있는 경우 /etc/ssl/certs 의 경로에서 루트 인증서들의 pem를 확인할 수 있다.
    • 렛츠인크립트의 경우에는 루트 기관으로 ISRG Root 를 사용하므로 이를 확인하여 넣어준다.
  • 결과적으로 Certificate  Chain에는 먼저, /etc/letsencrypt/archive/사용자의도메인 에서 cat fullchain1.pem 로 확인할 수 있는 내용 중 ---- 로 나누어져있는 문단에서 두 번째 내용을 복사해서 넣고, cat /etc/ssl/certs/ISRG_Root_X1.pem의 내용을 이어서 마지막에 붙여넣는다.

인증서가 잘 등록되면, 다음과 같은 화면을 확인할 수 있다.

로드밸런서에 인증서 적용하기

앞서 말한 Certificate Manager의 연계 상품으로 로드밸런서가 있었다. 실제로 로드밸런서에 이를 연동하여 적용해보자.

인증서 적용에 초점을 맞춰 로드밸런서의 동작 방식과 설정에 대한 자세한 내용은 이번 포스팅에서는하지 않는다.

로드밸런서 구성 실습

간단한 구성으로 로드밸런서를 구성하여 인증서를 연동하는 실습으로 진행된다. Public IP 네트워크를 지정하여 외부에서 접속할 수 있도록 한다.

기본 HTTP를 사용하지 않고 인증서를 적용하여 SSL 프토로콜만 이용하기 때문에 리스너에 443만을 추가한다.

이러한 설정은 실제로 실무에서 보안 요건으로 인하여 80 포트를 닫아버리고 443만 이용하는 경우에 볼 수 있는 내용이다.

다음 화면에서 드디어 미리 만들어둔 인증서를 사용하여 로드밸런서에 붙여줄 수 있다. `보유하고 있는 SSL Certificate 이용`에서 등록한 인증서 이름을 선택하고 지정한다.

다음으로 타겟 그룹으로 아파치 웹 서버가 설치되어있는 서버를 지정한 후, 다음 화면에서 전체적인 로드밸런서의 구성을 확인하고 로드밸런서 생성 버튼을 누른다.

로드밸런서 동작 확인

로드밸런서 서비스 화면에서 위와 같이 생성이 된 모습을 확인할 수 있다. 여기에서 공인 IP가 101.79.15.47로 할당되어있는 것을 기억하자. 그리고 필자의 경우 설정한 도메인 ncloud.cloudev.kr로 접속하면 다음과 같은 내용을 확인할 수 있다.

해당 도메인에 접속하면 로드밸런서로 접근하였으며 443 프로토콜을 사용하여 SSL이 잘 적용된 것을 확인할 수 있다.