Cloudflare를 이용한 HTTPS통신 도전기(02)
개인 서비스 HTTPS 적용 도전기 2
앞선 이야기...
Cloudflare에서 준 네임서버 주소를 HostinKR에 접속하여 내 도메인관리창에서 네임서버를 변경 후 등록을 기다리고 있는데...
Cloudflare를 이용한 HTTPS통신 도전기(01)
등록에 시간이 오래 걸린 이유
사실 이유고 나발이고 내가 가지고 있는 도메인이 2개인데 A를 Cloudflare에 등록했다면 HostingKR에 B 도메인 네임서버를 바꾸는 멍청한 짓을 하고 있었다....
그걸 나~중에 깨닫고 A로 정상적으로 설정하니 10분도 안되서 바로 등록 되었다....

CloudFlare API
DNS-01 방식으로 Let’s Encrypt 인증서를 발급하려면 certbot이 DNS 레코드를 직접 수정할 수 있어야 한다.
즉, Cloudflare DNS를 API로 제어할 수 있어야 하고 이를 위해 Cloudflare API 토큰이 필요하다.
API 토큰 생성
최소 권한을 위하여 Global API Key를 쓰지 않고Cloudflare 대시보드에서 프로필 > API 토큰 > 토큰 생성 클릭

영역 DNS 편집 템플릿을 선택한다.

최소권한을 위해 다음과 같이 설정한다.
- 영역 / DNS / 편집
- 영역 / 읽기
리소스는
- 포함 > 모든 영역
DNS-01 검증에 필요한 최소 권한 구성이다.

그 후 요약 계속을 누르면

와 같이 최종 확인을 한 후 토큰생성을 누르면

토큰이 생성된다.
토큰 값은 이 화면에서 단 한 번만 표시되므로 잘 저장해두자.
인증서 생성 및 갱신을 위한 API 등록
Cloudflare API 토큰은 certbot에서 바로 쓰는 게 아니라 ini 파일로 등록해서 사용했다.
dns_cloudflare_api_token = 발급받은_API_토큰
그리고 해당 파일은 보안을 위해 저장된 폴더 권한은 700 ini파일은 600을 부여하여 아무나 접근 불가하게 제한한다.
그 후 Cloudflare DNS 플러그인을 이용해 와일드카드 인증서를 발급한다.
$ sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials ini파일위치(/temp/credentials.ini) \
-d "*.도메인" \
-d 도메인

Successfully received certificate. 메시지가 나오면 성공이다.
성공했으니 발급된 인증서 확인해보자
$ sudo certbot certificates

방금 발급한 인증서가 시스템에 정상적으로 등록된 것을 확인 가능하다.
nginx ssl 설정
인증서를 발급 받았으니 이제 해당 인증서를 nginx에 적용해보자
server {
listen 443 ssl;
server_name 도메인;
ssl_certificate /인증서 경로/fullchain.pem;
ssl_certificate_key /인증서 경로/privkey.pem;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://IP(또는 upstream);
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

https를 위한 443포트 방화벽 설정
내 서버는 Ubuntu 서버로 ufw를 이용한 방화벽을 사용하고 있어서 443번 포트에 대한 인바운드 설정이 필요하다.
$ sudo ufw allow from IP/대역 to any proto tcp port 443

적용 확인


wiki.js로 띄운 위키에 도메인을 입력하여 접속 결과 인증서가 잘 적용 되는 것을 볼 수 있다.
느낀점
아... 보안점검 다닐때 왜 SSL 하기 싫어하는지 알겠다 이거 하나만 적용하는데도 귀찮네 이거...
그리고 네트워크 빌려 쓰고 있는 상황이라 포트포워딩도 어려워서 돌아서 하느라 빡셌네... 쩝...
그래도 해보고 싶었던 것 중 한가지 이루었으니 만족만족!
그래도 네임서버를 엉뚱한 도메인에 설정한건 진짜 아닌거 같아 에휴... 쩝.. 끝!
:wq