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키로 복호화 할 수 있는 방식이다
- 공개키로 암호화 -> 비밀키로 복호화 가능
-
비밀키로 암호화 -> 공개키로 복호화 가능
- 클라이언트가 접속한 서버가 신뢰 할 수 있는 서버임을 보장한다.
- SSL 통신에 사용할 공개키를 클라이언트에게 제공한다.
CA(Certificate authority)
SSL 인증서를 해당 CA를 통해 구입하게 된다. 그리고 클라이언트가 서버에 접속하면, 서버는 해당 SSL 인증서를 클라이언트에 넘겨준다. (SSL 인증서는 CA의 비밀키에 의해서 암호화 되어 있는 상태이다)
해당 SSL 인증서에는 아래의 정보가 있다.
- 서비스의 정보 ( 클라이언트가 접속하려는 서버가 제대로된 서버인가)
- 서버 측 공개키
클라이언트가 특정 서버에 접근할 때, 서버가 SSL 인증서를 클라이언트에게 보낸다. 해당 SSL 인증서에 있는 CA 정보를 가지고 브라우저가 가지고 있는 CA 리스트에서 찾는다. CA의 공개키는 브라우저가 가지고 있는데, 이 공개키를 통해서 인증서를 복호화한다.
여기서, SSL 인증서를 복호화 할 수 있다는 얘기는 해당 SSL 인증서를 암호화한 키(비밀키)와 복호화하는 공개키가 쌍을 이루고 있다는 얘기이다. 즉, 해당 CA가 암호화 한 것이라는 것을 보증할 수 있다.
통신의 과정
- hand-shaking
hand-shaking
-
- 클라이언트 -> 서버로 접속
- 클라이언트가 랜덤 데이터를 보내고, 클라이언트가 지원하는 암호화 방식에 대해서 알려준다,
-
- 서버 -> 클라이언트로 전송
- 서버에서 생성한 랜덤 데이터를 클라이언트로 보낸다. 클라이언트가 지원하는 암호화 기법을 선택해서 클라이언트로 전달. , 인증서를 전송한다. ( 해당 인증서 안에는 서버가 생성한 공개키가 들어있다.)
-
- 클라이언트가 인증서를 복호화
- CA에 의해 보증된 서버라는 것을 보증할 수 있다. 클라이언트는 이후에 자신이 서버로 보낸 랜덤 데이터와 서버로부터 온 랜덤 데이터를 조합해서 “대칭키”를 만든다.
이후 클라이언트는 서버로 부터 받은 공개키로 해당 대칭키를 암호화해서 서버로 전송해서, 양 쪽이 모두 대칭키를 가지게 된다.
- 서버는 공개키로 암호화된 대칭키를 복호화한다. 이후 일련의 과정을 통해서 앞에서 주고 받은 대칭키를 바탕으로 “세션 키”를 사용해서 해당 세션키를 대칭키로 사용하여, 데이터를 주고 받는다.
- 세션
데이터를 전송하는 세션. 클라이언트와 서버는 데이터를 주고 받을 때, 데이터들을 해당 대칭키로 암호화 하여 전송하고, 복호화한다.
- 세션 종료.
데이터 전송이 모두 완료되면, SSL 통신이 끝나고, 대칭키(정확히는 세션키) 를 폐기한다.
서버가 보내준 공개키를 통해서 암호화
#HTTP