Nginx 서버에 https 및 Let’s Encryt SSL 인증서 적용하기

Logan·2021년 8월 15일
2
post-thumbnail

서버를 구축하고 도메인과 연결했지만 https를 적용하지 않았다면 보안적으로 취약하고 SEO 측면에서도 손해를 보게 됩니다. https를 적용하기 전에 사용하는 이유를 먼저 알아봅시다.




HTTPS (HyperText Transfer Protocol over Secure Socket Layer)

  • 기존 HTTP 레이어에서 SSL(TLS) 프로토콜을 추가
  • 소켓 통신에서 일반 텍스트를 이용하는 대신 SSL(TLS)를 통해 세션 데이터 암호화
  • 암/복호화 과정이 추가되어 HTTP보다 느리지만 체감하기 어려움
  • 기본 TCP/IP 포트는 443

HTTPS를 사용하는 이유

기밀성
HTTPS는 공공 매체(인터넷)에서 두 참여자 간의 통신을 보호

무결성
HTTPS는 정보가 변조되지 않고 목적지에 도달하게 함

인증
HTTPS를 통해 웹 사이트의 진위여부 확인 가능

검색 우선순위
검색엔진에서 SEO를 통해 동일 키워드라면 https를 상위 노출

제가 사용할 무료 인증서인 Let's Encrypt의 작동방식은 아래 참고한 URL을 보시면 자세히 알 수 있습니다.

[참고]
https://letsencrypt.org/ko/how-it-works/



Certbot 설치 및 인증서 발급

Certbot은 Let’s Encrypt 인증서를 자동으로 발급 및 갱신을 해주는 프로그램 입니다. 제가 사용할 서버는 Centos 기반이기 때문에 yum으로 certbotpython2-cert-nginx를 설치하겠습니다.

$> yum install certbot python3-certbot-nginx -y

Certbot은 http와 같은 80포트를 사용하기 때문에 사용하기 전에 nginx를 stop 합니다. 그리고 standalone 플러그인을 사용하여 인증서만(certonly) 발급 받겠습니다.

$> systemctl stop nginx
$> certbot --standalone -d [Domain] certonly

[참고]



Nginx에서 HTTPS 설정

인증서를 발급 받았으면 nginx에서 http로 접근 시 https로 리다이렉트 시켜주는 설정과 인증서 경로를 등록해주는 설정을 진행합니다.



Nginx 재실행과 HTTPS 접속

이후에 nginx를 다시 실행시키고 도메인에 접속하면 https로 접속한 것을 확인 할 수 있습니다.
$> systemctl start nginx


Tip. Let’s Encrypt SSL 인증서 발급 방법

Webroot

사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급

  • 실제 작동하고 있는 웹서버의 특정 데렉토리의 특정 파일 쓰기 작업을 통해서 인증
  • nginx를 중단시킬 필요가 없다는 것이 장점
  • 인증 명령에 하나의 도메인 인증서만 발급이 가능한 것이 단점

Web Server

Nginx나 아파치와 같은 웹서버에서 직접 SSL 인증을 실시하고 웹서버에 맞는 SSL세팅값을 부여

  • 웹서버를 중단시키지 않고 발급 및 갱신 가능
  • 인증서 갱신 시 상황에 맞게 세팅을 자동으로 업데이트
  • 사용자가 세팅을 변경할 수 있지만 자동 업데이트 시 반영되지는 않음

Standalone

웹서버의 작동을 멈추고 네크워크(80 포트)를 이용해 사이트 유효성을 확인해 Let’s Encrypt SSL 인증서를 발급

  • 80포트로 가상 standalone 웹서버를 띄워 인증서를 발급
  • 동시에 여러 도메인 발급이 가능
  • 그렇지만 인증서 발급 전에 Nginx를 중단하고 발급 완료 후 다시 Nginx를 시작해야 함

DNS

도메인을 쿼리하여 확인되는 TXT 레코드로 사이트 유효성을 확인

  • 와일드 카드 방식으로 인증서 발급 가능
  • 서버 관리자가 도메인 DNS를 관리/수정할 수 있어야 함
  • 인증서 갱신 시마다 DNS에서 TXT값을 변경해야 하므로 외부에서 TXT 레코드를 입력할 수 있도록 DNS가 API를 제공하는 경우에만 갱신 과정을 자동으로 처리
    ex) Cloudflare API

[참고]
https://happist.com/573990/%EC%B5%9C%EC%8B%A0-lets-encrypt-ssl-%EC%9D%B8%EC%A6%9D%EC%84%9C-%EB%B0%9C%EA%B8%89-%EB%B0%A9%EB%B2%95-3%EA%B0%80%EC%A7%80-%EC%A0%95%EB%A6%AC

profile
Dev Log.

0개의 댓글