HTTPS 설정하기

타미·2020년 8월 2일
9
post-custom-banner

실습

저희가 실습한 CA는 Let's Encrypt 입니다. Let's Encrypt를 사용하면 무료로 SSL 인증서를 받을 수 있습니다. (대신 기간이 지나면 연장은 해주어야 합니다.)

순서

  1. 사전 세팅
    1. 도메인을 발급합니다.
    2. DNS에 도메인과 내 ip를 연결합니다.
  2. CA에 인증서를 요청 및 발급받기
    • 인증서가 포함하고 있는 내용은 도메인을 이 Server가 소유하고 있는지 입니다.
    • CA에서 도메인에 대한 소유권을 확인한다.
    • SSL 인증서가 발급된다.
  3. 서버에 등록한다.

환경

Ubuntu, Nginx

1. 사전 세팅

  1. 도메인 발급합니다.

    무료 도메인 발급 사이트에서 도메인을 발급 받기

  2. DNS 서버에 도메인과 ip 연결해주기

사이트 우상단 Services → MyDomains → Manage Domain

저는 AWS EC2를 사용했습니다. IPv4 퍼블릭 IP를 연결해줍니다.
image

DNS에 도메인과 ip가 잘 연결되었는지 확인해보겠습니다.

nginx를 시작한 후 (sudo service nginx start), 도메인으로 접속하니 잘 나오는 것을 볼 수 있습니다.

image

2. CA에 인증서 요청 및 발급 받기

저희가 등록한 CA는 Let's Encrypt입니다.

Let's Encrypt에 인증서를 발급받기 위해서는 Certbot을 설치해야 합니다.

Certbot은 Let's Encrypt 인증서를 자동으로 발급/갱신해주는 봇입니다.

Certbot 설치 전 사전 세팅

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

Certbot 설치

sudo apt-get install certbot #certbot 설치

Certbot에서 제공하는 인증 방식

  • Standalone
    • Certbot이 위한 간이 웹 서버를 돌려서 Let's Encrypt 서버로부터 오는 도메인 인증 요청을 직접 받아서 처리하는 방식입니다.
    • 인증을 받을 동안 서버를 중단해야 합니다.
    • 별도의 설정이 필요없기 때문에 간단한 Standalone 방식을 채택했습니다.
    • 인증요청 sudo certbot certonly –-standalone -d [도메인명]
    • :bangbang:이 때, 도메인명은 www를 제외하고, tommytommy.com와 같이 입력하셔야 합니다.
    • :bangbang: 이 때, nginx server를 중단시켜야 합니다.
  • Webroot
    • 인증을 위한 Challenge Seed를 외부에서 접근 가능한 미리 약속된 경로(/.well-known)에 위치시킨 뒤, Let's Encrypt 서버가 해당 경로로 접속해 인증에 필요한 정보를 읽어갑니다.
    • 서버를 중단할 필요가 없습니다.

인증 요청 후 🎉 Congratulations! 가 나오면 정상적으로 SSL 인증서가 발급된 것입니다.

image

Server에 인증서 등록

  1. 파일 위치로 이동하기

    Server에 인증서를 등록하기 위해 /etc/nginx/sites_available/default로 이동합니다.

    :bangbang: (참고) 절대경로 - root부터 시작되는 경로입니다.

  2. 파일 열기

    (sudo vi [파일명]) sudo vi defualt

image
이런 경고창이 나온다면 E를 눌러주세요. (Edit Anyway)

  1. 인증서 정보 등록하기

    80 포트로 접속해도 https 443 포트로 redirect 보내도록 설정하겠습니다.

    server {
    	listen 80;
    	listen [::]:80;
    	return 301 https://tommytommy.tk$request_uri;
    }
    
    server {
    	listen 443;
    	
    	ssl on;
    	ssl_certificate /etc/letsencrypt/live/tommytommy.tk/fullchain.pem;
    	ssl_certificate_key /etc/letsencrypt/live/tommytommy.tk/privkey.pem;
      
    }

    :bangbang: 오타주의 privatekey 아니고 privkey입니다.

    • ssl_certificate
      • 인증서
      • cert.pem: 서명된 인증서
      • chain.pem: Let’s Encrypt의 중간 인증서(intermediate certificate)
    • ssl_certificate_key
      • 인증서의 private key
      • 유출되면 안됩니다.

    이 2가지는 아까 SSL 인증서를 받을 때 발급 받았습니다.

image

  1. 서버를 재시작해줍니다.

    sudo service nginx restart

성공 ^__^

image

profile
IT's 호기심 천국
post-custom-banner

1개의 댓글

comment-user-thumbnail
2024년 1월 17일

중간에 오타가 보이네요

sudo certbot certonly --standalone -d {domain}

답글 달기