일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- TypeScript
- 백준
- LeetCode
- network
- BFS
- Database
- 자바
- 안드로이드
- Redux
- CS
- 그레이들
- 동적 계획법
- 프로그래머스
- 알고리즘
- VIM
- frontend
- Javascript
- DP
- DFS
- 다이나믹 프로그래밍
- 리트코드
- git
- Data Structure
- Algorithm
- Graph
- db
- java
- vscode
- react
- Python
Archives
- Today
- Total
늘 겸손하게
CS - Network - HTTP & HTTPS 본문
HTTP (HyperText Transfer Protocol)
인터넷 상에서 클라이언트와 서버가 데이터를 주고 받을 때 쓰는 통신 규약.
HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채 내용이 노출되는 보안 이슈가 존재.
이런 보안 문제를 해결해주는 프로토콜이 'HTTPS'.
HTTPS (HyperText Transfer Protocol Secure)
인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer) 프로토콜을 사용해 텍스트로 이루어진 HTTP를 암호화한 프로토콜.
HTTPS는 텍스트를 공개키 암호화 방식으로 암호화한다.
HTTPS 통신 흐름
- 애플리케이션 서버 (A)를 만드는 기업은 HTTPS를 적용하기 위해 공개키와 개인키를 만든다.
- 신뢰할 수 있는 CA 기업을 선택하고, 그 기업에게 내 공개키 관리를 부탁하며 계약을 함
- 계약 완료된 CA 기업은 해당 기업의 이름, A서버 공개키, 공개키 암호화 방법을 담은 인증서를 만들고, 해당 인증서를 CA 기업의 개인키로 암호화해서 A서버에게 제공한다.
- 클라이언트는 브라우저를 통해 HTTPS 요청 시작
- 서버는 요청에 대한 응답으로 3에서 받은 디지털 인증서를 반환
- 브라우저는 인증서에서 공개 키를 추출하고 세션 키를 공개 키로 암호화하여 서버에 전송
- 서버는 자신의 개인 키로 클라이언트로부터 받은 암호화된 세션 키를 복호화. 이제 클라이언트와 서버는 동일한 세션 키를 공유.
- 클라이언트와 서버는 공유된 세션 키로 데이터를 암호화, 복호화하여 통신
CA란? Certificate Authority로, 공개키를 저장해주는 신뢰성이 검증된 민간기업
HTTPS도 무조건 안전한 것은 아니다. (신뢰받는 CA기업이 아닌 자체 인증서 발급한 경우 등)
이때는 HTTPS지만 브라우저에서 '주의 요함', '안전하지 않은 사이트'와 같은 알림으로 주의 받게 된다.
[ 출처 ]
'Computer Science > Network' 카테고리의 다른 글
CS - Network - Blocking/Non-blocking & Synchronous/Asynchronous (0) | 2022.11.30 |
---|---|
CS - Network - 로드 밸런싱 (Load Balancing) (1) | 2022.09.26 |
CS - Network - TLS/SSL HandShake (0) | 2022.09.26 |
CS - Network - 대칭키 & 공개키 (0) | 2022.09.24 |
CS - Network - UDP (0) | 2022.09.24 |