HTTPS란??
http 프로토콜에 SSL(Secure Sockets Layer) 기술을 더한 것
HTTPS 사용 이유
- 내가 사이트에 보내는 정보를 다른 누군가가 훔쳐보지 못함
- 접속한 사이트가 진품인지, 신뢰할 수 있는 사이트인지 판별
→ 기관으로부터 검증된 사이트만 주소에 https 사용이 허가됨
대칭키
메세지를 보내는 쪽(암호화하는 쪽)과 받는쪽(복호화하는 쪽)이 같은 키를 사용
→ 대칭키가 노출되면 보안의 의미가 없다.
비대칭키(공개키)
메세지를 보내는 쪽(암호화하는 쪽)과 받는쪽(복호화하는 쪽)이 다른 키를 사용
💡 개인키로 암호화 하면 공개키로 복호화 가능
공개키로 암호화 하면 개인키로 복호화 가능
⇒ 신뢰할 수 있는 기관에서 공개키만 검증해준다면 만약 신뢰할 수 없는 사이트에서 접근 해 올 경우 해당 공개키로 열어보려 하면 오류가 난다.
💡 네이버의 공개키를 가지고 있고, 네이버로 가장한 신뢰할 수 없는 사이트에서 정보를 보내 올 경우 네이버 공개키로 풀려고 할 때 오류가 나기 때문에 검증된 사이트인지 판별할 수 있다.
여기서!!
검증해주는 기관을 CA(Certificate Authority)라고 부름
브라우저에는 CA들의 목록이 내장되어 있다.
HTTPS 통신 과정
- Handshake 과정
- 클라이언트는 서버로 랜덤 데이터를 서버로 보냄
- 서버 또한 랜덤 데이터와 함께 해당 서버의 인증서를 보냄
- 서버의 인증서 확인 과정
- 브라우저에 저장된 CA의 공개키로 인증서를 복호화 함
- → CA에 인증 받은 인증서들은 CA의 개인키로 암호화 되어 있다 .
- 복호화 된 인증서에는 서버의 공개키가 포함되어 있다
- 클라이언트는 Handshake 과정 시 주고받은 데이터를 혼합해서 임시키를 생성
- 임시키는 서버의 공개키로 암호화 돼서 서버로 보내짐
💡 비대칭키와 대칭키 둘 다 사용하여 데이터를 주고 받음
→ 비대칭키 사용은 대칭키 보다 컴퓨터에 큰 부담을 주기 때문
- 데이터를 암호화 할 땐 대칭키 사용
- 대칭키를 공유할 때 비대칭키 사용