지난번 NCP Global DNS를 이용하여 구입한 도메인을 NCP에서 활용하는 방법을 다루었는데요, 이번에는 좀 더 활용해서 도메인을 이용해 웹 서버의 인증서를 발급 및 적용을 해보도록 하겠습니다.
요건
- NCP Server를 이용하여 웹 서버를 구축하고 Global DNS를 매핑한 뒤 인증서 발급 및 적용
환경
- Centos 7.8(Web Server, httpd 설치)
- *본인 PC의 환경이 Window가 아니라면 Window Server 1대를 추가로 준비합니다.
프로세스
- 환경준비
- Web Server 설치(httpd - apache)
- Certbot를 이용한 도메인 인증서 발급
- Web Server에 인증서 적용하기
- Certification body 작성을 위한 SubCA+RootCA 인증서 만들기
- Load Balancer에 인증서 적용하기
주의 사항
- 도메인 발급 후 Certificate Manager를 통해 인증서 등록 시 적절하게 등록합니다.
1. 환경준비
제가 사용하는 PC는 Mac 환경이므로 2대의 서버를 준비하였습니다.
지난 번 구입한 도메인이 Global DNS에 잘 등록되어있는지 확인합니다. 만약, 등록되어 있지 않다면 아래 링크를 통해 등록을 진행합니다.
2022.08.25 - [NCP] - NCP Global DNS를 이용하여 구입한 도메인 등록
2. Web Server 설치(httpd - apache)
Centos 7.8 서버에 접속하여 httpd 설치를 진행합니다.
yum update -y
yum install httpd -y
웹 서버 시작 및 enable 설정을 진행합니다.
systemctl start httpd
systemctl enable httpd
NCP Global DNS로 이동하여 등록한 도메인에 호스트 정보 및 레코드 값을 이용하여 서버와 도메인 매핑을 진행합니다.
호스트:www
레코드 타입 : A
레코드 값 : 서버의공인아이피
도메인 접속을 통해 웹 서버가 잘 동작하는지 확인합니다.
3. Certbot를 이용한 도메인 인증서 발급
인증서 발급을 위해 Certbot 설치를 진행합니다.
yum install -y epel-release
yum update -y
yum install -y certbot
웹 루트로 이동하여 인증서 발급을 진행합니다.
cd /var/www/html
certbot certonly --webroot -w . -d 서버와 매핑한 도메인명
ex)certbot certonly --webroot -w . -d www.kbotest2.shop
인증서가 정상적으로 발급되었다면 /etc/letsencrypt/live/[도메인명] 에서 확인할 수 있습니다.
4. Web Server에 인증서 적용하기
웹 서버에서 443port 오픈 및 HTTPS 프로토콜을 허용하기 위해 ssl 모듈을 설치합니다.
yum install -y mod_ssl
/etc/httpd/conf.d/ssl/conf 설정을 변경합니다.
(상황에 맞게 필요한 설정을 진행합니다.)
vi /etc/httpd/conf.d/ssl.conf
...
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName www.kbotest2.shop
ServerAlias www.kbotest2.shop
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.kbotest2.shop/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.kbotest2.shop/privkey.pem
</VirtualHost>
*예시로 <virtualHost ... 부분부터의 내용을 위의 내용으로 전부 대체하였습니다.
웹 서버를 재시작하고 https://를 이용하여 접속 확인을 진행합니다.
systemctl restart httpd
인증서가 정상적으로 적용된 것을 확인할 수 있습니다.
5. Certification body 작성을 위한 SubCA+RootCA 인증서 만들기
서버에 인증서 적용을 완료했다면, 이번에는 Load Balancer에 등록하기 위한 작업을 진행하겠습니다.
NCP Load Balancer에 인증서를 적용하기 위해선, 먼저 Certificate Manager에 발급받은 인증서를 등록해야합니다.
certbot로 발급 받은 인증서의 경우 private key와 Certificate Body를 작성할 수 있지만 Certificate Chain의 경우 발급받은 인증서의 SubCA와 RootCA의 내용을 합쳐서 제작해야 합니다.
Private Key -> privkey.pem
Certificate Body -> cert.pem
Certificate Chain -> cert.pem을 이용하여 SubCA+RootCA 조합
발급받은 cert.pem 파일을 준비해둔 window 서버(혹은 PC)로 옮깁니다.
(윈도우 서버에서)
scp root@웹서버내부아이피:/etc/letsencrypt/live/도메인명/cert.pem C:\
ex)scp root@10.0.0.8:/etc/letsencrypt/live/www.kbotest2.shop/cert.pem C:\
인증서의 파일 형식을 pem -> crt로 변경하고 실행한뒤, Certfication Path로 이동합니다.
중간인증서(R3)를 클릭하고 View Certificate > Details > Copy to File을 클릭합니다.
Certificate Export Wizard를 통해 중간 인증서를 복사합니다.
이 때, 포맷은 Base-64로 선택합니다.
이번에는 Root CA 인증서를 같은 방식으로 발급받습니다.
루트 인증서와 중간 인증서가 발급되었습니다.
메모장을 열고 SubCA의 내용과 RootCA의 내용을 차례대로 붙여넣습니다.
Certificate Manager에서 발급받은 인증서의 내용을 등록합니다.
6. Load Balancer에 인증서 적용하기
먼저 웹 서버에 적용되어 있던 443 포트 오픈 설정을 off로 변경합니다.
* Load Balancer에 인증서를 적용시킬 것이므로 웹 서버에 설정한 인증서 적용을 없애고, LB->웹 서버로 443 -> 80으로 트래픽을 전달합니다.
SSLEngine off 설정
vi /etc/httpd/conf.d/ssl.conf
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
ServerName www.kbotest2.shop
ServerAlias www.kbotest2.shop
SSLEngine off
SSLCertificateFile /etc/letsencrypt/live/www.kbotest2.shop/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.kbotest2.shop/privkey.pem
</VirtualHost>
웹 설정 변경 이후 재시작 합니다.
systemctl restart httpd
추가로 Load Balancer에서 헬스체크 하기위한 웹 서버를 별도로 생성해야 합니다.
/var/www/html에서 hi.html을 생성합니다.
vi /var/www/html/hi.html
hi
NCP Application Load Balancer를 생성합니다.
*중간에 타겟 그룹을 생성합니다.
타겟 그룹 생성을 완료하고 LB 생성을 마저 진행합니다.
*LB의 리스너는 HTTPS 443, 타겟 그룹은 HTTPS 80으로 설정되어야 합니다.
Global DNS에서 서버와 설정했던 레코드 값 정보를 변경합니다.
마지막으로 https://www.kbotest2.shop로 접속하여 LB와 연결한 도메인을 통해 웹 서버로 잘 접속 되는지 확인합니다.
LB에 등록한 인증서까지 잘 적용된 것을 확인할 수 있습니다.
[여담]
NCP Certificate Manager에서 인증서를 손쉽게 관리할 수 있으며 갱신 만료일까지 알림을 통해 받을 수 있어서 참 좋은 것 같습니다.
인증서는 WAF,LB,서버 중 한곳에만 적용하면 된다는 점 잊지 마시고 겨울 철 감기 조심하시기 바랍니다 :)
'NCloud(NCP)' 카테고리의 다른 글
[Naver Cloud Platform] Ncloud API Service Pack Series - 1 CLOVA Recognition(Face, Speech) (0) | 2023.08.28 |
---|---|
[Naver Cloud Platform] Ncloud API Service Pack Series - 0 Begining(with. nShortURL) (2) | 2023.08.28 |
NCP API를 사용하는 방법(with. SENS) (0) | 2022.08.26 |
NCP Global DNS를 이용하여 구입한 도메인 등록 (0) | 2022.08.25 |
NCP Block Storage 파티셔닝 후 디스크 증축 (0) | 2022.08.05 |