[https] HTTPS

HTTPS

HTTPS 는 HTTP 프로토콜에 Over Secure Socket Layer 라고 하여, Secure(보안)과 관련된 계층을 추가한 것이다.

HTTP는 암호화가 되지 않기 때문에, 아이디와 비밀번호를 입력해서 서버로 넘기는 과정에서 데이터가 유출될 가능성이 있다.

HTTPS는 SSL / TLS 프로토콜 레이어에 Application Layer(HTTP) 아래에 추가 된 것이다.

SSL 디지털 인증서는 제 3자가 클라이언트와 서버 사이의 통신을 보증해주는 전자 인증서이다.

서버 -> 클라이언트에 인증서 정보 전달 클라이언트 -> CA를 통해서 검증

공개키 암호화 방식

공개키 암호화 방식은 크게 비밀키(private Key) 와 공개키(public key)가 있다.

공개키 방식은 두개의 키를 갖게 되는데 A키로 암호화를 하면 B키로 복호화 할 수 있고, B키로 암호화하면 A키로 복호화 할 수 있는 방식이다

  1. 공개키로 암호화 -> 비밀키로 복호화 가능
  2. 비밀키로 암호화 -> 공개키로 복호화 가능

  3. 클라이언트가 접속한 서버가 신뢰 할 수 있는 서버임을 보장한다.
  4. SSL 통신에 사용할 공개키를 클라이언트에게 제공한다.

CA(Certificate authority)

SSL 인증서를 해당 CA를 통해 구입하게 된다. 그리고 클라이언트가 서버에 접속하면, 서버는 해당 SSL 인증서를 클라이언트에 넘겨준다. (SSL 인증서는 CA의 비밀키에 의해서 암호화 되어 있는 상태이다)

해당 SSL 인증서에는 아래의 정보가 있다.

  1. 서비스의 정보 ( 클라이언트가 접속하려는 서버가 제대로된 서버인가)
  2. 서버 측 공개키

클라이언트가 특정 서버에 접근할 때, 서버가 SSL 인증서를 클라이언트에게 보낸다. 해당 SSL 인증서에 있는 CA 정보를 가지고 브라우저가 가지고 있는 CA 리스트에서 찾는다. CA의 공개키는 브라우저가 가지고 있는데, 이 공개키를 통해서 인증서를 복호화한다.

여기서, SSL 인증서를 복호화 할 수 있다는 얘기는 해당 SSL 인증서를 암호화한 키(비밀키)와 복호화하는 공개키가 쌍을 이루고 있다는 얘기이다. 즉, 해당 CA가 암호화 한 것이라는 것을 보증할 수 있다.

통신의 과정

  1. hand-shaking

hand-shaking

이후 클라이언트는 서버로 부터 받은 공개키로 해당 대칭키를 암호화해서 서버로 전송해서, 양 쪽이 모두 대칭키를 가지게 된다.

  1. 세션

데이터를 전송하는 세션. 클라이언트와 서버는 데이터를 주고 받을 때, 데이터들을 해당 대칭키로 암호화 하여 전송하고, 복호화한다.

  1. 세션 종료.

데이터 전송이 모두 완료되면, SSL 통신이 끝나고, 대칭키(정확히는 세션키) 를 폐기한다.

서버가 보내준 공개키를 통해서 암호화

#HTTP