HTTP
HTTP(Hypertext Transfer Protocol)
웹에서 이루어지는 모든 데이터 교환을 수행하며 클라이언트-서버 프로토콜이다.
HTTP 프로토콜은 일반적으로 TCP/IP 통신 위에서 동작하며 기본 포트는 80번이다.
SSL 암호화 통신
SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security , SSL의 후속버전 정도) 라는 보안프로토콜을 통해 클라이언트(브라우저)와 서버 (웹서버)가 보안이 향상된 통신하는 것
HTTPS
HTTPS를 통한 인터넷 접속은, 브라우저를 실행 중인 우리 컴퓨터 또는 휴대폰이 해당사이트의 서버와 암호화 통신을 하고 있다는 것을 의미한다.
이처럼 HTTPS를 이용한 인터넷 접속은 SSL(TLS)를 이용한 것이다.
✔️사용 이유 : HTTPS 에서 S는 Secure 보안을 뜻한다. 즉, 보안이 향상된 웹통신을 하기 위해서다.
HTTPS VS SSL
SSL, TLS 는 보안계층이라는 독립적인 프로토콜 계층을 만들어, 응용계층과 전송계층 사이에 속하게 된다, HTTP 뿐만아니라, FTP, SMTP와 같이 다른 프로토콜에도 적용할 수 있다.
HTTPS는 SSL 또는 TLS 위에 HTTP 프로토콜을 얹어 보안된 HTTP 통신을 하는 프로토콜, TLS와 HTTP가 조합된 프로토콜을 가리킨다.
- 보안 적용
-
SSL handshake
- 데이터를 주고받기 위해 어떤 방법을 사용해야하는지
- SSL은 443번 포트를 기본으로 사용하는 TCP 기반 프로토콜 (http는 80번 포트) 이기 때문에 TCP 3 way handshake를 수행한다.
- 협상 완료 후 SSL세션 생성 클라이언트와 서버는 원하는 데이터를 주고 받게 된다.
- 데이터 전송의 끝을 서로에게 알리며 세션 종료된다.
-
handshake 에서 협상하는 것
TCP 통신의 바탕 '신뢰성'
- Client hello
클라이언트가 서버에게 연락, 브라우저검색창에 도메인을 입력하는 것으로 보면 된다. 이 때 클라이언트는 자신의 브라우저가 지원할 수 있는 암호화방식 (Cipher Suite)을 먼저 제시한다. 그리고 렌덤 데이터를 생성하여 추가로 전송한다.
- Server hello
서버가 클라이언트에게 연락, 서버는 클라이언트가 제시한 암호화 방식 중 하나를 선정하여 알려준다. 또한 서버 자신의 인증서를 전달한다. 이 인증서에는 서버의 공개키가 포함되어 있음 클라이언트와 마찬가지로 서버 측에서 생성한 랜덤 데이터 또한 전달한다.
- Client key exchange
클라이언트는 미리 주고받은 자신과 서버의 랜덤 데이터를 참고하여 서버와 암호화 통신을 할 때 사용할 키를 생성한 후 서버에게 전달합니다. 이 때 키는 서버로부터 받은 공개키로 암호화되어 보내진다.
- Finished
마지막으로 핸드셰이크 과정이 정상적으로 마무리되면, 클라이언트와 서버 모두 'finished' 메세지를 보낸다. 그 후 부터 클라이언트가 생성한 키를 이용하여 암호화된 데이터를 주고받게 된다.