📌 https는 Hyper Text Transfer Protocol over Secure sockets layer 의 약자입니다.
소켓통신 레이어에서 안전성을 더한다는 의미입니다.
또한 자주 들리는 ssl은 http보다 조금 포괄적인 의미의 통신 프로토콜인데, 간단하게 생각해서 http가 ssl을 이용하게된다면 https 입니다.
ssl이 보편화되면서 ITF로 이관되어 tls으로 이름이 새롭게 지어졌다고 합니다. 사실상 같은것으로 생각하면 될 것 같습니다.
보내고자하는 데이터를 A가 대칭키 C로 암호화해서 B에게 보냅니다. 그 때 B가 똑같은 대칭 키 C로 복호화해서 데이터를 읽을 수 있습니다. 이 경우 데이터를 전송할 때 해커에게 빼았겨도 해커가 대칭키를 모르면 복호화가 불가능합니다. 그런데 해커가 대칭키까지 해킹해버린다면 손 쉽게 보안이 뚫립니다.
A가 B에게 A의 공개키를 알려줍니다. B는 A의 공개키로 암호화해서 데이터를 보냅니다. A는 시크릿키로 받은 데이터를 복호화한다. 이렇게 통신할 경우, 공개키를 해킹당하거나 암호화된 데이터를 해킹당해도 정보가 노출되지 않습니다. A의 공캐로 암호화된 데이터는 A의 시크릿키로만 복호화가 가능하기 때문입니다.
👀 과정을 조금 더 자세히 살펴보면,
1. 클라이언트와 서버가 서로의 공개키를 주고 받는다.
2. 클라이언트가 서버로 데이터를 전송할 때는 서버의 공개키로 암호화해서 보낸다. 서버는 비밀키로 이것을 비밀키로 복호화한다.
하지만 공개키 방식은 컴퓨팅파워가 너무 많이듭니다.
대칭키를 공개키를 활용해서 인코딩해서 서로 주고 받고, 공개키로 암호화하고 복호화하면서 통신합니다
- 악수 ( 가장 중요하고 복잡 )
- 실제 데이터 전송
- 세션종료
👀 사람은 악수를 하면서 많은 정보를 주고 받습니다. 예를 들어서, 악수를 하면서 안녕하세요 하면 한국인, Hello 하면 외국인이라는 정보를 주고 받습니다.
HandShake 과정에서 서버와 클라이언트도 비슷한 과정을 거칩니다. 서버 클라이언트가 서로 웹 서버와 브라우저의 버전이나 어떤 것을 사용하는지 등 이런것들을 탐색합니다.
https에서는 이 과정에서 서버의 인증서를 클라이언트에게 전송하고 클라이언트가 해독할 수 있는 암호화 기법을 서로 공유
😎 클라이언트 헬로란 아래 2,3번 과정이다.
😎 서버 헬로란 아래 5,6,7번 과정이다.
👀 브라우저는 이미 공인된 인증기관 목록과 공개키를 갖고 있다. 서버가 보낸 인증서가 목록 안에 존재하는 기관이 인증한 인증서인지 확인하는 과정을 거치고, 복호화한다.