HTTPS는 기존의 HTTP에 보안 계층 프로토콜(SSL/TLS 프로토콜)을 추가하여 암호화한 프로토콜이다.
SSL(Secure Socket Layer)
또는 TLS(Transport Layer Security)
라는 프로토콜로 대체한 것이다.HTTP ⇆ TCP
HTTPS ⇆ SSL ⇆ TCP
HTTPS는
제 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
를 폐기한다.