인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 사용하는 프로토콜이다.
- http는 텍스트를 교환하기 때문에 네트워크상에서 신호를 가로채가면 내용이 노출될 위험이 있다
- 이러한 보안 취약점을 해결해주는 프로토콜이 HTTPS이다
인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 사용하는 HTTP 프로토콜에
보안 계층 프로토콜인 SSL/TLS을 추가하여 정보를 암호화하는 프로토콜이다.
- 새로운 응용계층 프로토콜이 아니다.
HTTP의 통신하는 socket 부분을 SSL, TLS라는 프로토콜을 대체한 것이다.- HTTP는 암호화 과정이 없이 바로 TCP와 정보를 주고 받지만
HTTPS는 중간에 SSL 프로토콜을 거쳐 TCP와 정보를 주고 받는다.
https의 통신 흐름
- 어플리케이션 서버(A)를 만드는 기업은 https를 적용하기 위한 공개키, 개인키를 만든다
- 신뢰할 수 있는 CA기업을 선택하고, 그 기업에게 A의 공개키 관리를 부탁하여 계약한다.
(CA : 공개키를 저장해주는 신뢰성이 검증된 민간기업)- CA기업은 A 기업의 이름, 공개키, 공개키 암호화 방법 정보를 담은 인증서를 만들고
해당 인증서를 CA기업의 개인키로 암호화한뒤 A서버에게 제공한다.- A서버는 암호화된 인증서를 갖게된다.
이후에 A서버의 공개키로 암호화된 HTTPS 요청이 아닌 요청이 오면, 암호화된 인증서를 클라이언트에게 넘긴다.- 클라이언트는 CA 기업의 개인키로 암호화된 인증서를 받게 된다.
- 클라이언트의 브라우저는 이미 CA 기업의 공개키를 미리 알고 있기에 브라우저가 이를 복호화한뒤 A서버의 공개키를 얻을 수 있다.
이제 A서버와 통신할 때는 브라우저가 복호화한 A서버의 공개키를 통해 암호화하여 요청을 보낸다 (HTTPS 사용)
https는 무조건 안전할까?
아니다.
신뢰할 수 있는 CA기업이 아닌 자체 인증서를 발급할 경우 안정하지 않기 떄문에
HTTPS를 사용하지만 브라우저는 "주의 요함", "안전하지 않은 사이트" 와 같은 알림을 보낸다