일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 백준 N과 M 자바
- StringTokenizer
- 삼각형의 완성조건
- 큐
- SWEA
- 스택
- 프로그래머스
- index of
- 백준
- 클라이언트
- 오름차순 정렬
- 스프링부트 도커 배포
- Queue
- 프로그래머스 문자열 정렬
- lv2
- java
- Programmers
- 스프링부트 도커로 배포
- Lv1
- Stack
- 알고리즘
- 이진수 변환
- 문자열
- 프로그래머스 자바
- lv0
- 버퍼
- COS Pro
- 프로그래머스 풀이
- 자바
- 스프링부트 도커
- Today
- Total
mun dev
HTTP와 HTTPS 본문
HTTP(HyperText Tranfer Protocol)
HTTP는 인터넷에서 웹 서버와 사용자의 인터넷 웹 브라우저 사이에 문서를 전송하기 위한 통신 규약
HTTP를 사용해서 클라이언트인 웹 브라우저는 서버 웹페이지나 이미지 정보를 요청하고, 서버는 이 요청에 대한 정보를 응답
이때, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 문제가 발생할 수 있다. 이를 해결해주는 프로토콜이 HTTPS이다.
HTTPS(HyperText Tranfer Protocol over Secure Socket Layer)
기존 HTTP이 보안에 취약하다는 것을 개선하고자 SSL(Secure Sockets Layer) 기술을 추가한 것이다.
SSL(Secure Socket Layer)
웹 서버와 사용자의 웹 브라우저 간 통신을 암호화 하는데 사용되는 프로토콜이다.
SSL 주요특징
- SSL 인증서를 통해 클라이언트와 서버 간의 통신을 보증한다.
- 암호화된 데이터를 주고 받는다. 주로 대칭키 방식, 공개키 암호화방식이 사용된다.
대칭키 암호화
암호화와 복호화 과정에서 같은 암호키를 사용하는 알고리즘 방식이다.
주고 받는 정보에 대해서 같은 암호키를 사용하기 때문에 빠르다는 장점이 있지만, 암호키가 노출되면 암호화된 내용을 해독 가능하기 때문에 문제가 발생할 수 있다.
공개키(비대칭키) 암호화
암호키를 하나만 가지는 대칭키 암호화와 달리, 암호화와 복호화에 사용하는 암호키를 분리한 알고리즘 방식이다.
만약, A키로 암호화하면 B키로 복호화 가능하며, 반대로 B키로 암호화하면 A키로 복호화가 가능하다.
A와 B중 하나는 공개키가 되고, 나머지 하나는 비공개키가 된다.
이 방식은 안전하게 데이터를 주고받을 수 있지만, 속도가 느리다는 단점이 있다.
SSL 통신 과정
브라우저에 URL(https://~~)을 입력하여 접속한 이후의 과정이라고 보면 된다.
1) 클라언트 -> 서버
- 클라이언트는 랜덤 데이터를 만들어 서버에 보낸다.
- 클라이언트에서 사용 가능한 암호화 방식들을 서버에 보낸다.
2) 서버 -> 클라이언트
- 서버 또한 랜덤 데이터를 만들어 클라이언트에 보낸다.
- 클라이언트가 보낸 암호화 방식들 중에 사용할 방식을 선정하여 클라이언트에 보낸다.
- SSL 인증서도 같이 보낸다.
SSL 인증서에는 공개키, 인증서 발급자(CA), 도메인 등등의 정보가 담겨있다.
3)클라이언트 -> CA
- 서버에게 받은 인증서를 CA를 통해 확인한다. (믿을만한 서버인가 확인하는 과정)
- CA(브라우저에 저장된 CA리스트)에서 발급 받은 인증서라면 인증서의 공개키로 복호화할 수 있다. 왜냐하면 제대로된 인증서라면 CA의 비밀키로 암호화 되었기 때문이다.
즉, 서버에게 받은 인증서가 믿을만하다는 것이 보증된 것이다. 그러면 브라우저에도 https가 안전하게 연결됐다는 표시가 뜬다.
4) 클라이언트
- 1), 2) 에서 생성된 랜덤 데이터들을 조합하여 임시key를 만든다.
5) 클라이언트
- 임시key를 인증서의 공개키로 암호화한다.
6) 클라이언트 -> 서버
- 암호화한 임시key를 서버에 전송한다.
7) 서버
- 임시key는 서버에 저장된 비밀키로 복호화할 수 있다. 왜냐하면 인증서의 공개키로 암호화 되었기 때문이다. (비대칭키 암호화방식)
서버와 클라이언트가 임시key를 공유하게 되어 암호화된 데이터를 주고 받는다.
이전에 Handshake 과정이 끝나고 나면 클라이언트에는 두 종류의 랜덤 데이터가 존재한다는 것을 알 수 있다. (하나는 클라이언트에서 생성했던 랜덤 데이터이고, 나머지 하나는 서버가 만들어서 보내준 랜덤 데이터이다.)
클라이언트는 이 둘을 섞어서 특정 임시키를 생성하고, 이 임시키를 서버의 공개키로 암호화하여 서버로 전송하며, 서버는 그 임시키를 자신의 개인키로 복호화한다. 이제 클라이언트와 서버가 동일한 어떤 방식으로 그 임시키를 조작하면 동일한 대칭키가 생성이 된다.
결국, 둘의 통신을 위한 대칭키는 오직 둘만 가지고 있게 되기 때문에 안전한 데이터 통신이 가능해진다.
참고
https://tecoble.techcourse.co.kr/post/2021-09-25-https/
https://dolphinsarah.tistory.com/52
'CS > 네트워크' 카테고리의 다른 글
[네트워크] 네트워크 기초, LAN, TCP와 UDP (0) | 2024.01.23 |
---|---|
[네트워크] HTTP GET과 POST (1) | 2023.03.21 |
[얄팍한 코딩사전] - IP주소를 알아봅시다! (Feat. 공인/사설/고정/유동IP, 포트포워딩, DMZ, DDNS) (0) | 2023.02.21 |
[얄팍한 코딩사전] DNS가 뭔가요? + 도메인, A Record, CName (1) | 2023.02.21 |