
HTTPS는 기존의 HTTP에 보안 계층 프로토콜(SSL/TLS 프로토콜)을 추가하여 암호화한 프로토콜이다.
SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security)라는 프로토콜로 대체한 것이다.HTTP ⇆ TCPHTTPS ⇆ SSL ⇆ TCPHTTPS는
제 3자 인증,공개키 암호화,비밀키 암호화를 사용한다.
제 3자 인증은공개키 암호화는비밀키 암호화는공개키와 비밀키 (Public Key/Private Key)대칭키 암호화비대칭키 암호화인증기관 (Certificate Authority, CA)SSL가 데이터를 암호화하여 전달하는 방식

- 클라이언트가 서버에 접속한다. 이 단계를
Client Hello라고 한다.
Client Hello 단계에서 주고 받는 정보클라이언트 측에서 생성한 랜덤 데이터클라이언트가 지원하는 암호화 방식들세션 아이디
- 서버는 Client Hello에 대한 응답으로
Server Hello를 한다.
Server Hello 단계에서 주고 받는 정보서버 측에서 생성한 랜덤 데이터서버가 선택한 클라이언트의 암호화 방식인증서
- 클라이언트는 CA 인증서를 CA의 공개키로 복호화하여 접속 요청한 서버가 신뢰할만한지 검증한다.
- 복호화가 되면 CA 인증서가 신뢰할 만하므로 데이터를 주고 받을
대칭키를 생성한다.
클라이언트 측에서 생성한 랜덤 데이터와 서버 측에서 생성한 랜덤 데이터를 조합하여 pre master secret이라는 키를 생성한다.pre master secret는 절대로 노출되어서는 안된다)
- 대칭키를 서버의 공개키로 암호화하여 서버에 전송한다.
pre master secret 값을 공개키 방식으로 서버에게 전달한다.pre master secret 값을 암호화하여 서버로 전송하면, 서버는 자신의 개인키로 안전하게 복호화할 수 있다.
- 서버는 자신의 비밀키로 클라이언트가 보낸 대칭키를 복호화한다.
pre master secret 값을 자신의 비공개키(비밀키)로 복호화한다.
- 서버는 복호화한 대칭키를 통해 데이터를 암호화한 뒤 전송한다.
pre master secret 값을 master secret 값으로 만든다.master secret 값은 session key값을 생성한다session key 값을 이용하여 서버와 클라이언트는 데이터를 암호화한 뒤 주고 받는다. (대칭키 방식으로 암호화)
- 클라이언트와 서버는 Handshake 단계의 종료를 서로에게 알린다.
세션은 실제로 서버와 클라이언트가 데이터를 주고 받는 단계이다.
session key값을 이용하여 데이터를 대칭키 방식으로 암호화한다.공개키를 사용하면 될 것을 왜 대칭키와 공개키를 조합하여 사용할까?
📢 공개키를 그대로 사용하면 많은 컴퓨터 파워를 사용하게 된다.
📢 대칭키를 사용하면 상대에게 대칭키를 전송해야하는데, 암호화되지 않은 인터넷을 통해 대칭키를 전송하는 것은 위험하다.
👉 속도는 느리지만 안전하게 데이터를 주고 받기 위해 공개키 방식으로 대칭키를 암호화하고,
실제 데이터를 주고 받을 때 대칭키를 이용하여 주고 받는다.
데이터의 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알려준다.
session key를 폐기한다.