HTTP
개념
인터넷에서 서버와 클라이언트가 자원(데이터)를 주고받는 데 쓰는 프로토콜
구조
![](https://velog.velcdn.com/images%2Fgothae%2Fpost%2Fc2014622-edd1-4374-b69d-d5a9529f0abc%2Fimage.png)
특징
- 80번 포트 사용
- TCP/IP위에서 작동
HTTP는 Stateless 프로토콜이며 비연결성인데 비연결성인 UDP말고 연결성인 TCP/IP 사용 이유?
HTTP가 비연결이라는 의미는 이전의 요청과 다음 요청이 비연결이라는 것이지, 하나의 요청/응답에 대해서는 연결된 상태로 통신한다.
따라서 TCP/IP 사용
- HTTP는 암호화 되지 않은 평문 데이터를 전송하는 프로토콜 => 보안 이슈 => HTTPS 등장
HTTPS
개념
- HyperText Transfer Protocol over Secure Socket Layer
- SSL 프로토콜을 사용해 HTTP에
암호화
가 추가된 프로토콜
- 이 때 암호화는 대칭키 / 비대칭키 모두 사용
- 443번 포트 사용
HTTPS 동작과정
대칭키를 통해 빠른 연산 속도, 비대칭키를 통해 안정성을 모두 획득
- 대칭키 : HTTP 연결과정에서 먼저 서버와 클라이언트 간에
세션키
(주고 받는 데이터를 암호화 하기 위해 사용되는 대칭키)를 교환하는데 데이터 간의 교환에는 빠른 연산 속도가 필요하므로 세션키는 대칭키로 만들어진다.
- 비대칭키 : 이 세션키를 클라이언트와 서버가 교환할 때 비대칭키 사용
HTTPS 연결과정
조금 더 자세하게는 여기
- 클라이언트(브라우저) -> 서버 : 연결시도
- 서버 -> 브라우저 : 공개키(인증서)를 넘겨줌
- 브라우저는 인증서의 유효성을 검사하고 세션키를 발급함
- 브라우저는 세션키를 보관하며 추가로 서버의 공개키로 세션키를 암호화하여 서버로 전송
- 서버는 개인키로 세션키를 복호화하여 세션키 획득
- 이제 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터 전달 시에 이 세션키로 암호화/복호화 진행
![](https://velog.velcdn.com/images%2Fgothae%2Fpost%2Fbb3ba355-eb5e-4db4-9023-ce2d3d03771a%2Fimg.png)
서버가 대칭키를 발급받는 과정
- A기업은 HTTP 기반의 어플리케이션에 HTTPS 를 적용하기 위해 공개키/개인키를 발급
- CA기업에게 돈을 주고, 공개키를 저장하는
인증서
의 발급요청
- CA기업은 CA기업이름, 서버공개키, 서버정보 등을 기반을
인증서
생성하고, CA기업 개인키로 암호화하여 A기업에 제공
- A기업은 A기업의 공개키로 암호화된 HTTPS요청이 아닌 요청이 오면, 이 암호화된 인증서를 클라이언트에게 준다.
- 브라우저는 CA기업의 공개기를 미리 다운받아 가지고 있어, 암호화된 인증서를 복호화함.
- 암호화된 인증서를 복호화ㅣ하여 얻은 A기업의 공개키로 세션키를 공유함
인증된 CA기관의 인증서가 아니면 브라우저에 '안전하지 않음' 같은 경고메시지가 뜨는 것
비교
HTTP는 HTTTPS에 비해 더 빠르고 트래픽이 적게 발생하기 때문에 상대적으로 적은 비용으로 유지가능하지만, 보안에 취약한 큰 단점을 가진다.
=> 민감한 정보가 없는 페이지는 HTTP를 이용하는 것이 유리하고, 그렇지 않으면 HTTPS를 사용하는 것이 유리할 것이다.
참고
https://mangkyu.tistory.com/98
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/HTTP%20%26%20HTTPS.md