![](https://velog.velcdn.com/images%2Ffore0919%2Fpost%2F134ebae3-5c4e-45ee-ac3c-6975f09ac339%2F002.png)
1. HTTP란 ?
![](https://velog.velcdn.com/images%2Ffore0919%2Fpost%2F4da21ad2-d9cb-47a6-abb8-f66620d69659%2FFetching_a_page.png)
- Hyper Text Transfer Protocol
- 웹 서버와 사용자 컴퓨터에 설치된 웹 브라우저(클라이언트)사이에 인터넷에서 데이터(하이퍼텍스트)를 전송하기 위한 통신 규약
- 80번 포트 사용 -> HTTP 서버가 80번 포트에서 요청을 기다리고 있고, 클라이언트는 80번 포트로 요청을 보냄.
- 우리가 사용하는 웹 브라우저에서 인터넷 주소 앞에 들어가는 http://는 바로 이 프로토콜을 사용해서 정보를 교환 하겠다는 뜻.
- 정보를 하이퍼 텍스트로 주고 받기 때문에 데이터가 유출될 수 있다.
![](https://velog.velcdn.com/images%2Ffore0919%2Fpost%2F0666e9d2-e8ce-4ad0-b936-7c37350d2b68%2F1.png)
- 1989년 팀 버너스 리(Tim Berners Lee)가 처음 설계, www(World-Wide-Web)의 창시자이다.
📌
팀 버너스 리가 만든 인류 최초의 웹 사이트
http://info.cern.ch/
- HTTP는 애플리케이션 계층의 최상위에 있는 프로토콜.
- TCP 혹은 TLS(암호화된 TCP연결) 을 통해 전송.
![](https://velog.velcdn.com/images%2Ffore0919%2Fpost%2F43650c90-1f68-490f-9038-d23e2838dc08%2FHTTP%20%26%20layers.png)
-
HTTP의 '요청'시 구성요소
- HTTP 메서드, 클라이언트가 수행하고자 하는 동작을 정의한 GET, POST 같은 동사, OPTIONS나 HEAD같은 명사.
- 가져오려는 리소스의 경로 (Path)
- HTTP 프로토콜의 버전
- 서버에 추가정보를 전달하는 헤더
![](https://velog.velcdn.com/images%2Ffore0919%2Fpost%2F59d914e6-2a77-47e4-9eb9-8d71149e3f46%2F%E1%84%83%E1%85%A1%E1%84%8B%E1%85%AE%E1%86%AB%E1%84%85%E1%85%A9%E1%84%83%E1%85%B3.png)
-
HTTP의 '응답'시 구성요소
- HTTP 프로토콜의 버전.
- 요청의 성공 여부와, 그 이유를 나타내는 상태 코드(Status code).
- 상태 코드의 짧은 설명을 나타내는 상태 메시지.
- 요청 헤더와 비슷한, HTTP 헤더들.
- 선택 사항으로, 가져온 리소스가 포함되는 본문.
![](https://velog.velcdn.com/images%2Ffore0919%2Fpost%2Fe8042665-c141-45f9-ab4a-3991a1db6df0%2FHTTP_Response.png)
But,
HTTP는 암호화가 되지 않은 데이터를 전송하는 프로토콜이였기 때문에,
비밀번호같은 중요한 정보를 주고 받으면 제3자가 정보를 조회 가능함.
이러한 문제를 해결하기 위해 HTTPS가 등장하게 되었다.
2. HTTPS란 ?
![](https://velog.velcdn.com/images%2Ffore0919%2Fpost%2Fcf1c9820-4f1d-441e-ae3d-14f43c2f0d89%2F66.jpeg)
- HyperText Transfer Protocol over Secure Socket Layer
- HTTP에 SSL(보안 소켓 계층)을 이용해 데이터 암호화가 추가된 프로토콜.
- 443번 포트 사용
- TLS(전송 계층 보안) 프로토콜을 통해서도 보안을 유지함 (데이터 무결성 제공)
- 검색 엔진 최적화(SEO)에서 큰 혜택을 봄
- 가속화된 모바일 페이지(AMP)를 만들고 싶을 때 HTTPS를 사용해야 함.
![](https://velog.velcdn.com/images%2Ffore0919%2Fpost%2Fc1199b6f-9518-4ecd-b479-ed0eab240dc8%2F%E1%84%83%E1%85%A1%E1%84%8B%E1%85%AE%E1%86%AB%E1%84%85%E1%85%A9%E1%84%83%E1%85%B3%20(1).png)
3. HTTP 🆚 HTTPS
구분 | http | https |
---|
보안성 | 취약함 | 뛰어남 |
속도 | 빠름 | 느림(암호화/복호화 과정) |
추가 비용 | 없음 | 인증서 발급/유지 위해 필요 |
적합한 용도 | 단순 정보 조회 처리 | 개인정보 등 민감한 데이터 처리 |
동일 키워드 페이지 검색 / SEO | 검색 시 상위 노출 되지않음 | 검색 시 상위 노출 |
4. 암호화 방식
참고 : 공개 키 알고리즘 관련 자료
5. HTTPS의 동작 과정
대칭 키, 비대칭 키 방식을 혼합해서 사용한다.
- 서버는 암호화,복호화가 가능한 공개 키/개인 키를 한 쌍씩 가지고있음.
- 서버에서 개인 키 보관, 공개 키는 뿌림
- 사용자가 공개 키로 데이터를 암호화해서 서버로 요청을 보냄
- 서버에서 보관중인 개인 키로만 데이터를 복호화 할 수 있음. (공개 키로 해킹 불가능)
- 서버에서 다시 개인 키로 암호화 해서 응답을 보내면 사용자가 공개 키로 복호화. (해당 서버가 아닌 경우(ex.피싱사이트) 복호화 과정에서 오류 발생)
- 공개 키가 정품인지 확인 필요.
- 이것을 인증해주는 인증 기관(Certificate Authority, CA)에서 인증 해주어야 함 (브라우저에 리스트가 내장되어있음).
📌 자세한 과정 참고
- 최초로 서버/클라이언트 통신시 무작위 데이터를 주고 받으며 handshake 과정을 거치는데
이때 서버가 클라이언트에게 데이터와 함께 인증서를 준다.
- CA의 인증을 받은 인증서들은 CA의 개인 키로 암호화 되어있음.
- 인증서가 정품일 경우 브라우저에 저장된 CA의 공개 키로 복호화 가능.
- 복호화를 하면 그곳에 서버의 공개 키가 포함되어 있다.
만약 인증서가 CA의 인증이 되지 않으면 주소창에 경고 문구가 뜸.
- 클라이언트가 1번에서 주고 받았던 무작위 데이터로 임시 키를 만듬
- 임시 키는 서버의 공개키로 암호화 되어서 클라이언트에서->서버로 보내짐
- 동일한 임시 키를 가지게 된 서버-클라이언트는 그것으로 대칭 키를 만듬
- 해당 대칭 키는 서버와 클라이언트만 가지게 되기 때문에 제 3자가 알아볼수 없다.
참고 자료(References)
https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
http://blog.wishket.com/http-%ea%b7%b8%eb%a6%ac%ea%b3%a0-https%ec%9d%98-%ec%9d%b4%ed%95%b4/
https://mangkyu.tistory.com/98
https://cryptocat.tistory.com/3