[Server] DNS 등록 및 HTTPS 적용

Updated:

DNS $($Domain Name System)을 등록하고 Https를 프로젝트에 적용해 보도록 하겠습니다.

프로젝트 환경

  • Ubuntu 18.04
  • Nginx 1.1.4

DNS를 등록하기 위해서는 먼저 도메인을 발급받아야 합니다.

저는 가비아에서 .site 를 구매하였습니다. $($.shop이 500원으로 가장 저렴한 편입니다)

스크린샷 2022-04-15 오전 11.53.03.png

그 다음 가비아 DNS관리 → DNS 설정에 들어가서 레코드를 추가해 주었습니다.

스크린샷 2022-04-15 오전 11.55.32.png

www 호스트에 ip 주소값을 값/위치로 주어서 DNS 서버에 도메인과 ip를 연결시켜 주었습니다.

www를 붙이지 않고도 http://promisor.site 만으로 서비스에 접근할 수 있도록 호스트 값에 @를 주어 호스트를 공란으로 설정하였습니다.

터미널에서 sudo systemctl start nginx 로 nginx를 시작한 후 promisor.site로 접속하였더니 잘 접속되는 것을 확인할 수 있었습니다.

CA에 인증서 요청 및 발급

Let's Encrypt CA를 등록하였습니다.

Let’s Encrypt 인증서를 자동으로 발급/갱신해 주는 봇인 Certbot 을 설치해 주었습니다.

Certbot 설치 전 사전 세팅을 위한 명령어를 입력해 주었습니다.

  • apt-get 업데이트 : sudo apt-get update
  • 선행 소프트웨어 설치 : sudo apt-get install software-properties-common
  • 저장소 추가 : sudo add-apt-repository ppa:certbot/certbot
  • sudo apt-get update

사전 세팅을 마치고 Certbot을 설치해 주었습니다.

  • certbot 설치 : sudo apt-get install certbot

Certbot에서는 두 가지 인증 방식을 제공합니다.

  1. Standalone

    Let’s Encrypt 서버로부터 오는 도메인 인증 요청을 직접 받아서 처리하는 방식. 인증 받을 동안 nginx 서버를 중단해야 한다.

  • 인증 요청 : sudo certbot certonly —standalone -d http://promisor.site
    • 도메인 명은 www를 제외하고 입력.
    • systemctl nginx stop으로 서버 중단 시킨 후 인증 요청 수행
      1. Webroot

    인증을 위한 Challege seed를 외부에서 접근 가능한 미리 약속된 경로$($/.well-known)에 위치시킨 뒤, Let’s Encrypt 서버가 해당 경로로 접속해 인증에 필요한 정보를 읽어가는 방식.

    서버 중단 시킬 필요 없다.

Standalone 인증 방식을 선택하였으며 Cogratulation!이 나오면서 정상적으로 SSL 인증서가 발급 되었습니다.

스크린샷 2022-04-15 오후 12.45.58.png

❗Standalone 인증 방식 진행중에 No valid A recoreds found for ... 에러가 발생하였습니다.

이는 앞에서 진행한 DNS 설정에서 타입 A 레코드가 아직 적용되지 않았기 때문에 발생하는 에러였습니다.

DNS 설정에서 TTL(Time To Live)는 사용자의 DNS 레코드 값을 서버가 캐시 하는 시간을 의미합니다.

앞서 TTL을 3600초로 설정하였기 때문에 최초 쿼리를 해서 응답 값을 가져오는데 1시간을 기다려야 합니다.

1시간을 기다린 후 다시 인증 방식을 진행하였더니 정상적으로 SSL 인증서를 발급 받을수 있었습니다.

TTL의 숫자가 낮을수록 전파 속도를 높일 수 있지만 네임 서버에 대한 쿼리 수를 증가시키기 때문에 서버 과부화를 초래할 수 있습니다.

반대로 TTL이 높을수록 DNS 서버가 받는 쿼리 부담은 줄지만 갱신 주기가 느려지기 때문에 IP가 변경되어 DNS에서 수정을 할 경우 전파되는 시간이 길어지는 문제가 있습니다. $($보통 3600을 권장)

도메인을 최초 쿼리해서 가져온 응답값은 DNS서버나 사용자 PC의 캐쉬에 3600초를 시작으로 매초 마다 시간이 감소 되다 0이 되면 메모리에서 사라집니다. 그 다음 DNS서버에 IP 쿼리를 수행하는 작업이 반복됩니다.

Server에 인증서 등록

  • /etc/nginx/sites-available 경로로 이동
  • sudo vi default
  • 발급받은 인증서 정보 등록
    • http 기본 포트 : 80
      • http://promisor.site → 80번 포트로 접속
    • https 기본 포트 : 443
      • https://promisor.site → 443 포트로 접속

80번 포트로 요청이 들어오면 https 443 포트로 redirect$($301) 되도록 서버블록을 설정하였습니다.

스크린샷 2022-04-15 오후 2.58.34.png

ssl_certificate

  • chain.pem : Let’s Encrypt의 중간 인증서

ssl_certificate_key

  • 인증서의 private key

systemctl start nginx 를 통해 nginx 서버를 다시 실행한 다음 도메인에 접속하면 https가 적용된것을 확인할 수 있습니다.

스크린샷 2022-04-15 오후 2.50.07.png

참고 자료 📚

Categories:

Updated:

Leave a comment