HTTP
HTTP란?
- HTTP는 Hypertext Transfer Protocol의 약자로, 서로 다른 시스템들 사이에 통신을 주고 받게 해주는 가장 기본적인 프로토콜
- 서버-클라이언트 모델(클라이언트가 요청을 생성하기 위한 연결을 연 다음 응답을 받을때까지 대기하는 모델)에 맞춰 데이터를 주고 받기 위한 프로토콜
- 80번 포트를 기본적으로 사용함
- HTTP는 정보를 텍스트 기반의 평문으로 주고 받기 때문에 네트워크에서 정보를 탈취하거나 변조할 수 있는 보안적 위험이 있음
HTTP 특성
- Connectionless 프로토콜(비연결 지향)
- 클라이언트가 서버에 요청했을 떄, 그 요청에 맞는 응답을 보낸 후 연결을 끊는 처리방식
- Stateless 프로토콜
- 커넥션을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있음
- 클라이언트와 첫번째 통신에서 데이터를 주고받았다 해도, 두번째 통신에서 이전 데이터를 유지하지 않음 (하지만 데이터 유지가 필요한 경우가 많음)
쿠키 & 세션
HTTP의 문제점
- 평문 통신이기에 도청이 가능함 -> 암호화로 해결
- 통신 자체를 암호화하거나(HTTPS) 데이터를 암호화하는 방법등이 있음
- 데이터를 암호화하는 경우에는 수신측에서 복호화 과정이 필요함
- 완전성을 증명할 수 없기 때문에 변조가 가능함 -> 암호화로 해결
- HTTPS에서는 메세지 인증 코드(MAC), 전자 서명등을 통해 변조 방지
- 통신 상대를 확인하지 않기 때문에 위장이 가능함 -> 인증
- 의미없는 리퀘스트도 수신하기 때문에 DOS 공격을 당할 수 있음
- 통신하고 있는 상대방이 허가된 상대인지 확인할 수 없음
- HTTPS에서는 CA 인증서를 통해 인증된 상대와 통신이 가능
HTTPS
HTTPS란?
- Hypertext Transfer Protocol + Secure Socket Layer의 의미를 가짐
- HTTP 메세지에 포함되는 콘텐츠 정보에 보안 요소(암호화)가 추가되는 것이 큰 차이점
- 모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전에 SSL 계층을 통해 암호화됨
- HTTPS는 HTTP 하부에 SSL 또는 TLS의 보안 계층이 추가됨

- HTTP와 다르게 443포트를 기본적으로 사용함
HTTPS 보안 작동 방식
<인증서 발급>

1. 서버는 공개키와 개인키를 만든 후, 신뢰할 수 있는 인증기관(CA)에 자신의 정보와 공개키를 관리해달라고 계약한다.
2. 인증 기관은 서버가 제출한 데이터를 검증한다. 검증을 완료하면 인증 기관만의 개인키로 서버에서 제출한 정보를 암호화한다.
3. 암호화된 인증서를 만들어 서버에게 제공해준다.
4. 인증기관은 웹브라우저에게 인증기관의 공개키를 제공한다.
(웹브라우저는 브라우저가 자동으로 신뢰하는 CA 인증서 집합이 사전 구성되어있고, 설치될때 함께 설치된다. 이 공개키를 사용하여 웹 서버의 인증서가 실제로 신뢰할 수 있는 인증기관에서 서명되었는지 확인한다.)
<서버에 데이터 요청>

1. 클라이언트(웹브라우저)가 사이트에 접속한다.
2. 서버는 자신의 인증서를 클라이언트에게 보낸다. (이때의 인증서는 인증기관이 만들어준 인증서)
3. 클라이언트는 브라우저에 미리 저장되어 있는 인증기관의 공개키로 인증서를 해독한다. 해독하여 검증하는 과정에서 접속하려는 서버의 정보와 서버의 공개키를 알게된다.(인증기관이 인증서를 만들때 이러한 정보를 가지고 만들기 때문)
4. 얻은 서버의 공개키를 이용하여 대칭키를 생성한다. (이때 대칭키를 굳이 생성하는 이유는 비대칭키보다 훨씬 계산이 효율적이기 때문이다. 처음 연결을 설정할 때에만 비대칭키 암호화를 사용하고, 이후 통신에서는 대칭키 암호화를 사용한다.)
5. 서버의 공개키로 위에서 생성한 대칭키를 암호화해서 사이트에 보낸다.
6. 서버는 서버의 개인키로 암호문을 해독하여 대칭키를 얻게 되고, 이제 양쪽이 대칭키를 이용해 데이터를 주고받을 수 있게 된다.

계속 대칭키를 사용해 데이터를 주고받다가 세션이 종료되면 대칭키를 폐기한다.
(클라이언트와 서버 간의 특정 세션 동안에만 사용되는 암호키이기 때문에 이 대칭키를 세션키라고 부르기도 한다.)
이 과정 자체를 SSL/TLS handshaking이라고 부르기도 한다.
HTTPS 단점
- HTTPS 설치 및 인증서 유지에 추가 비용이 발생
- 암호화 과정이 웹 서버에 부하를 줌
- HTTP에 비해 속도가 느림
- 인터넷 연결이 끊긴 경우 재인증 시간이 소요
- HTTP는 비연결형으로 웹페이지를 보는 중 인터넷 연결이 끊겼다가 다시 연결되어도 페이지 계속 볼 수 있음
- HTTPS는 소켓 자체에서 인증을 하기 때문에 인터넷의 연결이 끊기면 소켓도 끊어져서 다시 HTTPS 인증이 필요해짐
참고
https://rachel-kwak.github.io/2021/03/08/HTTPS.html
https://developer-ellen.tistory.com/189
https://wooody92.github.io/network/HTTP-%EB%B3%B4%EC%95%88-%EB%AC%B8%EC%A0%9C%EC%99%80-HTTPS/
https://dev-coco.tistory.com/61