HTTPS(HyperText Transfer Protocol Secure)는 새로운 애플리케이션 계층의 프로토콜이 아닌, HTTP 통신하는 소켓 부분을 SSL(Secure Socket Layer)/ TLS(Transport Layer Security)라는 프로토콜로 대체한 것이다.
HTTPS = HTTP + SSL(Secure Sockets Layer) or TLS
HTTP protocol의 암호화된 버전(클라이언트와 서버 간의 모든 커뮤니케이션을 암호화 하기 위해 SSL이나 TLS를 사용)으로 클라이언트가 민감한 정보를 서버와 안전하게 주고받도록 해준다.
HTTP와 같이 암호화하지 않은 프로토콜의 문제점은 다음과 같다.
TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있기에 패킷을 수집하는 것만으로 도청할 수 있다. 평문으로 통신을 할 경우 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신할 필요가 생겼다. ⇒ 통신 자체를 암호화 : SSL(Secure Socket Layer) or TLS(Transport Layer Security) 라는 서로 다른 프로토콜을 조합함으로써 HTTP 의 통신 내용을 암호화할 수 있다. ⇒ 콘텐츠를 암호화 : ****HTTP 메시지에 포함되는 콘텐츠만 암호화하며, 받은 측에서는 그 암호를 해독하여 출력하는 처리가 필요하다.평문
암호 알고리즘의 입력 대상으로, 암호화되지 않은 정보
request를 보낸 곳의 웹 서버가 원래 의도한 response를 보내야 하는 웹 서버인지 확인할 수 없다.
response를 반환한 곳의 클라이언트가 원래 의도한 request를 보낸 클라이언트인지를 확인할 수 없다.
통신하고 있는 상대가 접근이 허가된 상대인지를 확인할 수 없다.
어디에서 누가 request 했는지 확인할 수 없다.
의미없는 request도 수신하므로, DoS 공격을 방지할 수 없다.
⇒ SSL or TLS는 상대를 확인하는 수단으로 증명서를 제공한다. 이는 제 3자 기관(CA)에 의해 발행되는 것이기 때문에 서버나 클라이언트가 실재하는 사실을 증명한다. 이 증명서를 이용함으로써 통신 상대가 내가 통신하고자 하는 서버임을 나타내고 이용자의 개인 정보 누설 등의 위험성이 줄어들게 된다. 또한 클라이언트는 이 증명서로 본인 확인을 하고 웹 사이트 인증에서도 이용할 수 있다.
⇒ MD5, SHA-1 등의 해시값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 존재하지만, 확실히 확인할 수 있는 것은 아니므로 인증이나 암호화, 그리고 다이제스트 기능을 제공하는 HTTPS를 사용해야 안전하다.중간자 공격(Man-in-the-Middle)
공격자가 도중에 리퀘스트나 리스폰스를 빼앗아 변조하는 공격
HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL 과 통신하고 SSL이 TCP 와 통신하게 된다. SSL을 사용한 HTTPS는 암호화와 증명서, 안전성 보호를 이용할 수 있다. 공통키 암호화 방식과 공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용한다.
하이브리드 암호 시스템
공통키를 공개키 암호화 방식으로 교환한 다음에, 다음부터의 통신은 공통키 암호를 사용하는 방식
그렇다면 서로에게 공유되는 공개키가 진짜인지는 어떻게 확인할까? 사실 이를 증명할 방법은 없다. 대신 이 증명을 대신해주는 공인된 제 3자가 존재한다면 나름 그럴듯 해진다. 이 제 3자의 역할을 하는 것이 CA이며, 이는 서버가 보낸 공개키가 정품인지 인증해주는 공인된 민간기업이다. 브라우저의 프로그램에 CA의 목록이 내장되어 있다.
평문 통신에 비해서 암호화 통신은 CPU나 메모리 등 리소스를 더 많이 요구한다. 통신할 때마다 암호화를 하면 추가적인 리소스를 소비하기 때문에 서버 한 대 당 처리할 수 있는 리퀘스트의 수가 상대적으로 줄어들게 된다. 하지만 최근에는 하드웨어의 발달로 인해 HTTPS를 사용하더라도 속도 저하가 거의 일어나지 않으며, 새로운 표준인 HTTP 2.0을 함께 이용한다면 오히려 HTTPS가 HTTP보다 더 빠르게 동작한다. 따라서 웹은 과거의 민감한 정보를 다룰 때만 HTTPS에 의한 암호화 통신을 사용하는 방식에서 현재 모든 웹 페이지에서 HTTPS를 적용하는 방향으로 바뀌어가고 있다.
참고 자료
HTTPS가 뭐고 왜 쓰나요? (Feat. 대칭키 vs. 비대칭키)
HTTPS는 HTTP보다 빠르다
[10분 테코톡] 리니의 HTTPS