배경
- HTTP(HyperText Transfer Protocol)는 웹에서 리소스 교환을 위한 전송 프로토콜(in 애플리케이션Layer)이며, 클라이언트-서버간 프로토콜이다. (ex. 서버의 응답을 받아 사용자의 브라우저에서 요청한 데이터를 볼 수 있게끔 해준다.)
- HTTP는 데이터가 입력한 그대로 전송된다. → 3자가 중간에서 데이터를 열람할 수 있기 때문에 보안에 취약하다.
따라서, HTTP에 SSL(컴퓨터 네트워크에 통신 보안을 제공하기 위해 설계된 암호 규약, 위키피디아)을 적용하여
보안성을 갖춘 HTTP, HTTPS(Hypertext Transfer Protocol Secure)가 탄생한다.
HTTPS의 원리
- SSL인증서를 통해 보안성을 갖춘다.
- SSL인증서는 신뢰성을 보장하는 CA(Certificate Authority)기관에서 서버에게 발급한다.
- 우리가 사용하는 브라우저들은 CA리스트를 가지고 있다.
- 데이터의 전송은 특정 알고리즘으로 암호화하여 이루어진다. 다음은 대표적은 암호화 알고리즘이다.
- 대칭키 방식 : 암호화와 복호화에 같은 키를 사용한다.
- 비대칭키(공개키) 방식 : 비밀키(=개인키)와 공개키가 존재하며, 다음과 같은 조건을 만족한다.
- 비밀키로 암호화한 내용은 공개키로만 복호화가 가능
- 공개키로 암호화한 내용은 비밀키로만 복호화가 가능
<steps>
클라이언트가 서버에 접속 요청(with 클라이언트의 무작위 데이터)
→ 서버는 CA로 부터 받은 SSL인증서를 클라이언트에게 전송(with 서버의 무작위 데이터)
→ 클라이언트는 해당 SSL 인증서를 브라우저에 존재하는 CA리스트에 있는 공개키(CA기관의 비밀키에 대응하는 키)로 복호화한다. (SSL 인증서 안에는 해당 서버의 공개키가 들어있다.)
→ 복호화에 성공한다면 서버로 부터 받은 SSL인증서가 CA기관으로 부터 발급 받은것을 확신 할 수 있다.
→ 이제 클라이언트는 자신과 서버가 각각 전송한 무작위 데이터를 혼합해서 임시키를 만들고,
SSL 인증서에서 나온 서버의 공개키로 임시키를 암호화해서 서버에 전송한다.
→ 생성한 임시키는 양쪽에서 일련의 과정? 을 거쳐 클라이언트-서버 간 유일한 대칭키가 된다.
→ 이제 이 대칭키를 통해 클라이언트와 서버가 데이터를 전송한다.
- 이 때, 클라이언트는 SSL 인증서에서 나온 서버의 공개키로, 서버는 자신이 가진 비밀키로 데이터 교환을 하면 안될까?
: 안전한 데이터 교환은 맞다. 하지만, 비대칭키 방식은 대칭키 방식에 비해 암호화, 복호화에 더 큰 비용이 필요하다. 따라서, HTTPS에서의 데이터 교환은 비대칭키와 대칭키 방식이 혼합되어 사용된다.
- 안전한 대칭키를 생성하기 위해 비대칭키 사용
- 이후의 데이터 교환은 대칭키를 사용
출처
lion-king.tistory.com/entry/Https-SSL-handshake?category=854172
'IT study > Notebooks' 카테고리의 다른 글
| OS - Cache(feat. Page 교체) (0) | 2021.04.08 |
|---|---|
| OS - 세마포어(Semaphore), 뮤텍스(Mutex) (0) | 2021.04.06 |
| OS - Process & Thread (0) | 2021.03.31 |
| Network - API (0) | 2021.03.31 |
| Network - web 동작의 기본 이해 (0) | 2021.03.24 |