본문 바로가기

소프트웨어-이야기/Web

HTTPS 통신 순서

1. 브라우저는 호스트 주소를 IP로 변환한다. 로컬에 IP 주소가 있으면, 주소 정보를 재사용한다. 만약 없으면 DNS 서버에 질의한다.

 

2. 주소가 https 스키마로 시작하는 경우, 클라이언트는 서버의 443 포트로 TCP 커넥션을 연다.

SSL 트래픽은 바이너리 프로토콜이기 때문에 HTTP와는 다르다. 그래서 80번 포트가 아니라 443 포트로 통신한다.

 

3. 클라이언트와 서버가 보안 변수를 주고받는 HandShake 시작한다.

 

3-a. 클라이언트가 서버에 보안 설정을 위한 요청을 보낸다. 이를 Client Hello라고 부른다.

세션키 생성에 사용할 랜덤 스트링, 사용가능한 암호화 기법 등을 전달한다.

 

3-b. 서버도 보안 설정에 필요한 응답을 내려준다. 이를 Server Hello라고 부른다.

세션키 생성에 사용할 서버 랜덤 스트링, CA (인증서), 채택한 암호화 기법 정보를 내려준다. 

인증서에는 서비스에 대한 설정과 공개키가 포함되어 있다.

 

3-c. 클라이언트는 서버로 받은 공개키로 인증서를 복호화한다. 

복호화에 성공하면, HandShake에 성공한 것으로 간주한다.

클라이언트와 서버가 서로 주고받은 랜덤스트링은 대칭키로 사용된다.

 

4. 클라이언트는 SSL을 통해 암호화된 데이터를 서버에 전달하고, 응답을 받는다. 

5. 요청이 모두 종료되면, SSL을 닫는다.

6. TCP 커넥션을 닫는다.

 

참고

<HTTP 완벽가이드 - 14장 보안 HTTP>

https://cheese10yun.github.io/https/#null