HyperText Transfer Protocol
서버와 클라이언트 사이에서 어떻게 메시지를 교환할지를 정해놓은 규칙
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다
✔ 프로토콜 : 컴퓨터 내부 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계.
기기간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구하는데, 이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 한다.
HyperText Transfer Protocol Secure
TLS을 사용해 암호화 된 연결을 하는 HTTP
✔ TLS (Transport Layer Security) : 전송 계층 보안. SSL에 기반한 기술. 보안통신을 위한 프로토콜. 아직 SSL이라는 이름을 많이 사용.
TLS 상의 HTTP 구현
주요기능
사용포트
HTTP 80이 아닌 HTTPS 443번 포트를 사용
🎓 사전지식
✔ 애플리케이션 서버를 만드는 기업은 HTTPS를 적용하기 위해 개인키와 공개키를 만든다
✔ CA에게서 공개키에 대한 인증서를 발급받는다.
✔ CA의 인증을 받은 인증서들은 해당 CA의 개인키로 암호화 되어있다.
- CA(Certificate Authority) : 공개키 인증서를 발급해주는 공인된 민간기업. 대부분의 운영체제나 브라우저에 CA의 목록들이 미리 등록되어있다.
클라이언트는 서버를 신뢰하지 못하는 상태이기 때문에 서로의 신원을 확인하고 통신 암호화에 사용할 세션 키를 공유하기 위해 탐색 과정을 거친다. 이 과정을 handshake라고 한다.
Client Hello
클라이언트에서 서버에게 무작위 데이터를 보낸다.
Server Hello
클라이언트의 데이터를 받은 서버도 무작위 데이터와 해당 서버의 인증서를 보낸다.
인증서 검증
클라이언트는 CA들의 정보를 통해 인증서를 검증한다. (CA의 공개키로 복호화) 복호화 된 인증서에는 서버의 공개키가 포함되어있다.
임시키 생성
클라이언트는 Client Hello
와 Server Hello
과정에서 주고받은 무작위 데이터로 pre master secret
이라는 임시키를 생성한다. 이 임시키는 서버의 공개키로 암호화되어 서버로 전송된다.
세션키 생성
서버는 개인키를 통해 pre master secret
을 복호화하고 이를 통해 master secret
을 생성한다. 그 뒤 master secret
으로 session key
를 생성한다. (클라이언트 역시 같은 과정을 거쳐 세선키 생성)
handshake 종료
서버와 클라이언트는 각자 동일한 세션키를 가지게 되었고 이를 통해 대칭키 암호를 사용하는 통신을 할 수 있다.
💛 참고 :
https://wayhome25.github.io/cs/2018/03/11/ssl-https/
https://youtu.be/H6lpFRpyl14