본문 바로가기
서버 & 네트워크

HTTPS 적용하기

by 자바지기 2021. 9. 19.
반응형

HTTP와 HTTPS의 차이점

 

HTTP란?

HyperText Transfer Protocol의 줄임말이다.

클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다. 웹 브라우저가 HTTP를 통하여 서버로부터 HTML(hyper text markup language)을 요청하면 서버는 요청에 응답하여 필요한 정보를 클라이언트에게 전달한다. 

HTTP는 암호화가 되지 않은 데이터를 전송하는 프로토콜이기 때문에 이 문제를 해결하기 위해 HTTPS 가 등장하였다.


HTTPS란?

HyperText Transfer Protocol Secure 의 줄임말이다. HTTP의 보안이 강화된 버전이다.

HTTPS는 사용자 데이터의 무결성기밀성을 유지할 수 있게 해주는 인터넷 프로토콜이다.

HTTPS를 사용하면 웹 사이트 사용자가 인터넷을 통해 중요한 데이터를 안전하게 전송할 수 있다.

 

HTTPS는 TLS라는 전송 계층 보안 프로토콜을 이용하여 보안을 강화한다.

TLS를 사용하면 기밀성과 데이터 무결성이 보장된 상태로 통신할 수 있다.

더보기

TLS: 인터넷을 통한 통신 보안을 제공하며 클라이언트/서버 애플리케이션이 비밀이 유지되고 안정적인 방식으로 통신할 수 있게 해주는 프로토콜이다. 

 

TLS 이전에 SSL이라는 프로토콜이 있었다. SSL의 취약한 부분을 개선한 새로운 버전의 프로토콜이 TLS이다.

TLS는 3중 핵심 보호층을 제공한다.

  • 암호화: 교환되는 데이터를 암호화하여 침입자로부터 보호한다.  사용자가 웹사이트를 탐색하는 동안 아무도 사용자를 추적하거나 정보를 도용할 수 없다. 
  • 데이터 무결성: 데이터가 전송되는 동안 데이터가 변경되거나 손상되는 일을 방지한다.
  • 인증: 사용자가 의도된 웹사이트와 통신 중임을 입증한다.

HTTP는 보안이 추가되지 않았기 때문에 보안에 취약하고 HTTPS는 보안이 추가되어 안전하지만

HTTPS를 이용하면 암호화를 하는 과정이 필요하기 때문에 HTTP보다 속도가 느리다.

따라서 단순 정보 조회만을 처리한다면 HTTP를 이용하는 것이 좋다.

(그러나 오늘날에는 HTTP와 HTTPS의 속도 차이가 거의 없다고 한다.)


간략하게 HTTPS에 대하여 알아보았으니 HTTPS를 적용해보자

 

Let's Encrypt

Let's Enctypt는 무료로 TLS 인증서를 발급해주는 인증 기관이다.  

 

1.  certbot 설치 

웹 사이트에서 HTTPS를 사용하려면 CA(인증 기관)에서 인증서(SSL)를 가져와야 한다.

인증서를 얻기 위해 certbot 소프트웨어를 설치한다.

sudo apt update
sudo apt upgrade
sudo apt-get install letsencrypt -y

certbot 개발자들이 최신 버전의 Ubuntu 소프트웨어 저장소를 기준으로 꾸준히 제공해주기 때문에

최신 버전의 저장소로 만들어 준다

 

sudo add-apt-repository ppa:certbot/certbot

certbot를 위한 저장소를 추가한다.

 

sudo apt install python3-certbot-nginx

certbot의 Nginx 패키지를 설치한다.

certbot을 사용할 준비를 마쳤다.


2. Nginx 설정

Nginx 기본 설정 파일에 들어가서 인증서를 적용할 도메인 이름을 설정한다.

sudo vim /etc/nginx/sites-available/default

server_name _ ; 부분을 위의 사진과 같이 변경해주었다.

 

sudo nginx -t

변경 후 테스트를 진행하여 잘 작동하는지 확인했다. 

 

sudo systemctl reload nginx

시스템 reload 실행


3. 방화벽의 HTTPS 허용

Ubuntu는 기본적으로 ufw라는 방화벽을 가지고 있다. 

sudo ufw status

ufw에 대한 방화벽이 비활성화되어 있음을 확인할 수 있다.

그러나 AWS EC2 인스턴스에서는 보안 그룹 설정을 따로 해주어야 한다. 기본적으로 SSL프로토콜은 443 포트 번호를 사용한다.

사진과 같이 인스턴스 인바운드 규칙에 443 포트를 추가한다.


4. SSL 인증서 받기

HTTPS는 TLS프로토콜을 통해 보안을 강화한다고 했는데 왜 SSL 인증서를 받는 지 궁금해졌다.

알아보니 여전히 SSL이 더 일반적으로 사용되는 용어이기에 SSL 보안 인증서라고 불린다.

 

 

Certbot은 다양한 플러그인을 통해 SSL 인증서를 획득하는 다양한 방법을 제공한다.

Nginx플러그인은 필요할 때마다 Nginx를 재구성하고 구성을 다시 로드한다.

 

sudo certbot --nginx -d skrrr.shop -d www.skrrr.shop

원하는 도메인을 지정하여 Nginx 플러그인을 통해 인증서를 획득한다.

 

이메일 입력
동의하라니까 동의도 해준다.
메일 알림 설정에는 no로 답해주었다.

1. No redirect : HTTP를 HTTPS로 redirect 하지 않는다.

2. Redirect: HTTP를 HTTPS로 redirect한다.

 

2번을 선택하여 redirect 하게끔 설정하였다.

축하의 메세지

https://skrrr.shop/ 으로 접속이 잘된다


5. www.ssllabs.com/ssltest/ 에서 테스트 해보기

축하의 메세지 사진에서 테스트를 진행해야한다고 나와있다.

www.ssllabs.com/ssltest/ 에 접속하여 www.skrrr.shop 도메인을 입력해보았다. 

 

테스트 성공


6. certbot 자동 갱신 확인

Let's Encrypt 의 인증서는 90일 동안만 유효하다. certbot을 설치하는 과정에 90일마다 자동으로 갱신시켜주는 커맨드가 존재하는데 이 갱신 프로세스가 잘 동작하는지 테스트 해본다.

sudo certbot renew --dry-run

 

 

 

 

 

 

 

 

 

Reference: https://velog.io/@banjjoknim/Lets-encrypt%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-Nginx%EC%97%90-HTTPS-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0#%EB%93%A4%EC%96%B4%EA%B0%80%EA%B8%B0-%EC%95%9E%EC%84%9C

반응형

'서버 & 네트워크' 카테고리의 다른 글

네트워크 모델  (0) 2021.09.22
네트워크란?  (0) 2021.09.21
Domain적용하기  (0) 2021.09.19
PHPMyAdmin 설치하기  (0) 2021.09.18
MySQL 외부에서 접속하기  (0) 2021.09.17

댓글