HTTPS란 무엇인가?
HTTPS란 HyperText Transfer Protocol over Secure Socket Layer의 약자이다
HTTPS는 왜사용하는가?
외부에서 내가보낸 데이터를 훔처보지 못하게 하기위해서 사용한다.
http통신에서는 평문통신을 하게되는데 이럴때는 외부에서 감청을 할 수 있게된다.
여기서 평문을 서버에서만 알아볼수 있도록 암호화 하는것이 https 이다.
어떻게 암호화를 하는것인가?
대칭키와 비대칭키를 이용한 암호화를 한다.
대칭키 : 암호화와 복호화 하는 방식이 같다.
ex) 1 -> A, A->1
결국 대칭키를 전달하는 과정이 필요하기 때문에 문제점이 생긴다.(중간탈취)
비대칭키(공개키, 개인키) : 암호화와 복호화 하는 방식이 다른다.
A키와 B키가 있다고 할때 A키로 암호화를 하면 B키로만 풀 수가 있다.
공개키는 아무에게나 공개할 수 있는 키이고 개인키는 서버가 가지고 있는 키이다.
공개키로 암호화를 하게되면 개인키로만 풀수 있기대문에 중간에 탈취당해도 해독할 수 없게된다.
우리가 연결한 사이트가 맞는지 증명을 하는방법
우리가 연결한 사이트가 네이버라고 할때 네이버가 보낸정보는 개인키로 암호화되어있기때문에 우리는 공개키로 열어볼 수 있다.
다른사이트에서 네이버인척 데이터를 보내면 공개키로 열어볼때 에러가 나기때문에 증명이 가능하다.
그렇다면 공개키가 맞는다는것은 어떻게 증명할까?
CA(Certificate Authority)라는 제 3의 기관에서 증명을 하게된다.
이것은 크롬, 사파리, 파이어폭스와 같은 브라우저에 CA목록이 내장되어 있다.
인증과정
클라이언트(사용자)는 서버를 신뢰할 수 없는 상태이다.
따라서 서로를 신뢰하기 위해 handshake 과정을 하게된다.
- 클라이언트는 랜덤한 데이터를 생성하여 서버에 보내게 된다.
- 데이터를 받은 서버는 무작위로 생성한 데이터와 인증서를 같이 보내 응답한다.
- 여기서 받은 데이터와 인증서를 이용하여 CA에게 인증을 부탁하게 된다.
- CA의 인증을 받은 인증서는 CA의 개인키로 암호화가 되어있다.
- 인증서를 복호화 하게된다면 서버와 통신할 수 잇는 공개키가 들어있다.
여기서 공개키를 받아서 끝날수도 있다고 생각할 수 있지만 비대칭키를 이용한 통신은
암호화 복호화 하는과정에서 많은 비용이 발생하기 때문에 비대칭키과 대칭키를 혼용하게 된다.
비대칭키를 이용하여 대칭키를 공유받고 앞으로는 이 대칭키를 이용하여 통신을 하게된다.
비대칭키를 이용하여 공유를 받았기때문에 중간에 탈취당할 염려가 사라지게 된다.
대칭키는 아까 handshake 과정을 거치면서 보낸 임시의 데이터들을 이용하여 대칭키를 만들게 된다.