[Network] 10th
10주차 : 강의 내용 외 기출 질문 모음
HTTP vs HTTPs
- HTTP(HyperText Transfer Protocol)
-
암호화하지 않은 프로토콜로 Application Layer에서 쓰이는 프로토콜
-
연결 상태를 유지하지 않는(Stateless,기존 인터넷의 철학) 비연결성 프로토콜이다.
- HTTPs(HTTP over SSL)
- HTTP의 보안이 강화된 버전의 프로토콜
- HTTP는 TCP 기반으로 동작하지만, HTTPs는 소켓 부분을 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer)라는 프로토콜로 대체하여 응용 계층은 SSL을 TCP로 인식하고, TCP는 SSL을 응용 계층으로 인식하여 통신하게 된다.
- OSI 어느 한 계층에 속해서 동작하는 것이 아닌, 응용계층과 전송계층 사이에서 독립적인 계층을 만들어서 동작
- 응용계층에서 받은 데이터를 암호화하여 TCP에 보냄.
공개키(비대칭키) vs 대칭키
대칭키 | 공개키(비대칭키) | |
---|---|---|
주요 기능 | 암복호화에 사용하는 키가 동일, 처음 통신시에 키를 교환하면서 시작 | 암복호화에 사용되는 키가 서로 다름(송수신자 모두 (개인키, 공개키) 가지고 있음) |
장점 | 공개키 암호화 방식에 비해 암호화 및 복호화가 빠르다 | 이름 그대로 키가 공개되어 있기 때문에(공개키의 경우) 키를 교환할 필요가 없어짐, 보안상으로 좋음 |
단점 | 키 배송 과정에서 중간에서 키가 탈취될 수 있다/해당 키를 아는 사람만이 문서를 볼 수 있기 때문에 사람이 증가할수록 전부 따로따로 키 교환을 해야하기 때문에 키관리가 어려워짐 | 속도가 느리다 |
공개키 동작 방식
- 사용자 B (공개키, 개인키)의 쌍을 생성한다 -> 이 때 , 공개키는 공개적으로 등록되어 있고, 개인키는 본인만이 알고 있다.
- 사용자 A가 B의 공개키를 가져온다.
- A가 B의 공개키를 사용해 데이터를 암호화한 뒤, B에게 전송한다.
- B는 암호화된 데이터를 자신의 개인키로 복호화한다.(개인키를 가지고 있는 수신자만이 암호화된 데이터를 복호화할 수 있다.)
SSL
대칭키 암호화 방식과 공개키 암호화 방식을 혼합한 하이브리드 방식 사용
SSL 하이브리드 동작 과정
- A가 B의 공개키로 통신에 사용할 대칭키를 암호화한 뒤 B에게 보냄
- B는 암호문을 받고, 자신의 비밀키로 복호화함 -> 대칭키를 알게됨
- B는 A로부터 얻은 대칭키로 A에게 보낼 평문을 암호화하여 A에게 보냄
- A는 자신의 대칭키로 암호문을 복호화
-
앞으로 이 대칭키로 암호화 통신
-> 대칭키를 주고 받을 때만 공개키 암호화방식 사용
Naver.com을 치면 일어나는 과정
- Clinet가 브라우저에 ‘www.naver.com’을 입력하면, DHCP 서버를 통해 자신의 IP 주소를 부여받고, TCP/IP가 초기화되어 server와 통신할 준비 완료
- DNS 쿼리 과정을 통해 도메인 네임에 해당하는 IP주소를 찾아 사용자가 입력한 URL 정보와 함께 전달된다. (iterated Query vs Recursive Query)
- 페이지 URL 정보와 전달받은 IP주소는 HTTP 프로토콜을 사용하여 HTTP 요청 메세지를 생성하고, TCP 프로토콜을 사용하여 해당 IP주소의 컴퓨터로 전송
- 도착한 HTTP 요청 메세지는 HTTP 프로토콜을 사용하여 웹 페이지 URL 정보로 변환되어 웹 페이지 URL 정보에 해당하는 데이터 검색를 검색한다.
- HTTP 응답 메세지를 생성하고 검색된 웹 페이지 데이터가 TCP 프로토콜을 사용하여 인터넷을 거쳐 원래 컴퓨터로 전송된다.
- 도착한 HTTP응답 메세지는 HTTP 프로토콜을 사용하여 웹 페이지 데이터로 변환되어 클라이언트 웹 브라우저에 의해 출력되어 사용자가 볼 수 있게 된다.
Cookie vs Session
배경 : 기존의 인터넷 철학은 Stateless상태로, 상태 정보를 유지하지 않는 상태 -> 매번 통신할 때 마다 TCP connection을 해야하고, 매번 사용자 요청을 까먹음. 쿠키와 세션을 통해 HTTP의 stateless한 문제점을 해결
쿠키 | 세션 | |
---|---|---|
저장위치 | 사용자의 웹 브라우저가 지정하는 메모리나 하드디스크(로컬에 저장하는 데이터 파일) | 서버의 메모리 |
만료시점 | 저장할 때, expires 속성을 정의하면 삭제될 날짜 지정 가능 | 클라이언트가 로그아웃되거나 설정 시간동안 반응이 없으면 무효화 -> 정확한 시점 알 수 x |
resource | 클라이언트에 저장하고, 클라이언트 메모리를 사용하기에 서버 자원 활용x | 서버에 저장, 서버 메모리로 로딩 -> 세션이 생길 때마다 리소스 차지 |
보안 | 취약 | 우수 |
속도 | 빠름 | 쿠키에 비해 느림 |
예시 | “아이디와 비밀번호를 저장하시겠습니까?”/자동로그인/ “오늘 더 이상 이 창을 보지 않음” 체크 기능 | 화면이 이동해도 로그인이 풀리지 않고 로그아웃하기 전까지 유지 |
** 세션에서는 서버가 클라이언트를 구분하기 위해 클라이언트별로 세션 ID가 할당됨
참고 링크