[DevOps] 3. HTTPS 적용하기

jinni·2025년 11월 11일

DevOps

목록 보기
4/6

대부분의 웹 서비스들은 HTTPS를 사용하고 있다.
HTTP는 단순히 텍스트 기반 프로토콜이기 때문에 로그인 정보나 쿠키 등이 네트워크를 지나는 동안 그대로 노출될 수 있다.
반면, HTTPS는 SSL/TLS 암호화로 도청을 막고, 무결성으로 데이터 변조를 방지하며, 인증으로 신뢰할 수 있는 서버임을 보장한다.

이번 포스팅에서는 운영 중인 웹서버에 HTTPS를 적용하는 과정을 나열하려고 한다.

도메인 준비하기

HTTPS는 HTTP 위에 TLS(Transport Layer Security) 계층을 얹은 프로토콜이다. 즉, 서버와 클라이언트가 통신할 때 이 서버가 진짜 맞는지와 데이터를 안전하게 주고받을 수 있는지를 TLS가 보장해주는 구조이다.

그렇다면 왜 도메인이 필요할까?

TLS 인증서는 ‘도메인’을 기준으로 발급된다.

TLS 인증서를 발급할 때, 인증 기관은 특정 도메인에 대한 소유권을 검증한다.

예를 들어 example.com 에 대한 인증서를 발급받는 경우 CA는 다음을 확인한다.

  • 이 요청을 보낸 사람이 실제로 example.com 의 DNS를 제어할 수 있는가?
  • 즉, example.com 의 주인이 맞는가?

이 검증 과정을 Domain Vaildation(DV)이라고 부른다.

인증서는 ip주소가 아니라 도메인 이름 단위로 신뢰를 보장한다.

IP 주소는 신뢰할 수 있는 ‘주체’로 간주되지 않는다.

공인 IP는 ISP 클라우드 사업자가 관리하는 자원이다. 따라서 IP는 언제든지 다른 사용자에게 재할당될 수 있다.

이 때문에 인증 기관은 IP 주소만으로 신뢰할 수 있는 소유권을 검증할 수 없다고 판단한다. 즉, IP 주소로는 인증서를 발급받을 수 없다.

클라이언트는 SNI(Server Name Indication)로 서버를 식별한다.

하나의 서버가 여러 사이트를 운영할 때, 브라우저는 어떤 도메인에 접속하려는지를 TLS Handshake 초기에 알려준다.

  • 브라우저 → 서버: example.com 으로 접속하려고해
  • 서버 → 브라우저: 여기 example.com 용 인증서야!

이 과정을 거치기 때문에, 서버는 도메인별로 올바른 인증서를 선택할 수 있고, 클라이언트는 그 인증서가 해당 도메인에 맞는지 검증할 수 있다.

IP만 있다면 이런 매칭이 불가능하다.

도메인과 Web Server 연결하기

나는 가비아에서 도메인을 구입하였다.

가비아에 접속하여 다음 과정으로 도메인과 Web Server를 연결한다.

등록 확인하기

nslookup [domain]

Non-authoritative answer:
Name: [도메인]
Address: [ip주소]

형태로 출력된다면 정상적으로 등록된 것을 확인할 수 있다.

SSL/TLS 인증서 발급하기

가장 많이 사용되는 무료 인증서 발급 도구는 Certbot이다.

Let’s Encrypt에서 인증서를 자동으로 발급하고 갱신까지 지원한다.

Certbot 설치

sudo snap install core
sudo snap install certbot --classic

Nginx에 SSL 적용하기

sudo certbot --nginx -d [domain]
sudo systemctl reload nginx

명령어만 실행하면 /etc/nginx/sites-available/defalut 위치에 SSL 관련 설정을 자동으로 채워주게 된다.

0개의 댓글