logo
menu

Ubuntu 환경에서 HTTPS 적용 A to Z

2022. 06. 10.

  • #클라우드

  • #프로젝트

💡
NHN Cloud(Ubuntu 18.4) + nginx 환경에서 SSL(HTTPS) 적용하는 방법에 대하여 알아보자
우선 전체적인 Flow
  1. 도메인 구매
  1. DNS 설정 (도메인을 IP 주소에 설정)
  1. SSL 관련 패키지 설치 (certbot?) ← LetsEncrypt 가 포함되어 있는거 같다!
  1. NGINX 설정 (server 에 도메인 등록하기)
  1. 방화벽 허용 및 확인
  1. SSL 인증서 가져오기
  1. SSL 인증서 자동으로 갱신
 
  1. 도메인 구매
      • 나는 가비아에서 구입함
  1. DNS 설정 (도메인을 IP 주소에 연결)
      • 적용 후 테스트하기
        • nslookup www.seunggyu.shop ns.gabia.co.kr # Server: ns.gabia.co.kr # Address: 211.234.118.50#53 # Name: www.seunggyu.shop # Address: 133.186.244.169
          nslookup seunggyu.shop ns.gabia.co.kr # Server: ns.gabia.co.kr # Address: 211.234.118.50#53 # Name: seunggyu.shop # Address: 133.186.244.169
        • 현재 백엔드와 연동했기 때문에 접속이 되는 것을 확인할 수 있다.
        • notion image
  1. 관련 패키지 설치 ← 여러 글들을 참고해서 정확하지 않을 수 있다.! (나중에 다시 설정해보기)
    1. # sudo apt update # sudo apt install software-properties-common # sudo add-apt-repository universe # sudo add-apt-repository ppa:certbot/certbot # sudo apt update # sudo apt install certbot python3-certbot-nginx ## 또는 # sudo add-apt-repository ppa:certbot/certbot # sudo apt install python-certbot-nginx
  1. NGINX 설정 (server 에 도메인 등록하기)
    1. sudo vim /etc/nginx/sites-available/default # name server 에 suenggyu.shop, www.seunggyu.shop 등록 ## nginx 설정 부분 # ... # server_name seunggyu.shop; ## 해당 구문 추가
      ## nginx 설정 확인 sudo nginx -t sudo system reload nginx
  1. 방화벽 허용 및 확인
    1. 필자의 경우 NHN Cloud 에서 보안 그룹으로 설정하기 때문에 방화벽 허용 명령어는 수행하지 않음.
      방화벽 상태만 확인함.
      sudo ufw status # Status: active # To Action From # -- ------ ---- # 80/tcp ALLOW Anywhere # 443/tcp ALLOW Anywhere # 22/tcp ALLOW Anywhere # 80/tcp (v6) ALLOW Anywhere (v6) # 443/tcp (v6) ALLOW Anywhere (v6) # 22/tcp (v6) ALLOW Anywhere (v6)
  1. SSL 인증서 가져오기
    1. sudo certbot --nginx -d seunggyu.shop -d www.seunggyu.shop sudo certbot --nginx -d seunggyu.kr -d www.seunggyu.kr # Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 1: No redirect - Make no further changes to the webserver configuration. # 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for # new sites, or if you're confident your site works on HTTPS. You can undo this # change by editing your web server's configuration. # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Select the appropriate number [1-2] then [enter] (press 'c' to cancel): # ---- 내가 적용한 것 (multi domain) # sudo certbot --nginx -d seunggyu.kr -d www.seunggyu.kr -d seunggyu.shop -d www.seunggyu.shop
      1, 2 중에 입력 → 2 선택 → 그러면 자동으로 nginx 에 적용됨!
      1의 경우: 리다이렉트 없음 - 웹서버 설정에 아무런 변화도 없습니다.
      2의 경우: 리다이렉트 - 모든 http 연결을 https로 리다이렉트 합니다. 웹서버 설정을 변화시킬수 있습니다. 변화된 설정은 다시 복구가 가능합니다.
      ## 2 선택 # IMPORTANT NOTES: # - Congratulations! Your certificate and chain have been saved at: # /etc/letsencrypt/live/seunggyu.shop/fullchain.pem # Your key file has been saved at: # /etc/letsencrypt/live/seunggyu.shop/privkey.pem # Your cert will expire on 2021-08-18. To obtain a new or tweaked # version of this certificate in the future, simply run certbot again # with the "certonly" option. To non-interactively renew *all* of # your certificates, run "certbot renew" # - If you like Certbot, please consider supporting our work by: # # Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate # Donating to EFF: https://eff.org/donate-le
      선택을 하고 엔터를 누르게 된다면, 구성이 업데이트되고, Nginx가 자동으로 재시작 됩니다.
      certbot은 프로세스가 성공되었으며, 인증서가 저장된 위치를 알려주며 종료되게 됩니다.
  1. 확인
    1. notion image
  1. SSL 자동으로 갱신시키기 ← 아직 해보지 않음, 적용해보고 수정하겠음.
    1. cron-tab 적용해야함
      sudo certbot renew --dry-run
      • 나는 에러 없이 잘 동작했음. (좀 더 알아보고 정리해보기)

reference