비연결성으로 인한 장점도 있지만, 클라이언트의 요청을 완료하고 나면 해제하는 일은 동일한 클라이언트에 대해서도 앞으로의 모든 요청에 대해 매번 새로운 연결 시도 및 해제의 과정을 거쳐야하므로 오버헤드가 발생한다는 단점이 있다.
KeepAlive 패킷을 주고 받아 해결할 수 있지만, 수 많은 동시다발적인 인터넷 환경에서 클라이언트 마다 keep alive 속성을 기록하고 계산하는 것은 서버에 과부하를 유발한다.
비연결성으로 인해 서버는 같은 클라이언트인지를 식별할 수가 없어서 보안에 주의를 기울여야하고 이러다 보면 번거로운 과정이 생긴다. => 이것을 Stateless라고 하며 상태를 기억하기 위해 세션, 쿠키, 토큰 등을 활용한다.
암호화 없이 Plain Text를 주고 받기 때문에 통신 과정에 도청 위험이 있다. => HTTPS 를 통해 SSL, TLS 를 사용하여 암호화하여 통신하는 것으로 방지할 수 있다.
비연결성으로 인해 서로의 통신상대에 대한 정보를 저장, 확인하는 과정이 없기 때문에 위장이 가능하다. 따라서 자신이 통신하는 상대에 대한 신뢰성이 없기 때문에 DoS, 악성 위조 사이트 접근 등 여러 문제가 발생한다. => HTTPS 를 통해 통신하도록 하면 CA 가 서로의 신분을 보장하기 때문에 무분별하고 신뢰받지 못하는 접근을 방지할 수 있다.
무결성을 보장 못 한다. 위의 두 특성이 가능한 덕분에 Man in the Middle 공격이 가능하다. 갈취 - 변조 - 위장 전송 의 과정을 거친 데이터인지 확인 불가. => HTTPS를 통해 대칭키를 안전하게 교환하여 암호문으로 통신을 한다면 통신 대상자 이외에는 전송, 데이터 작성, 데이터 복호화가 불가능해져 무결성이 보장된다.
HTTPS
Hyper Text Transfer Protocol over Secure socker layer
SSL 이나 TLS 프로토콜을 통해 데이터를 암호화하여 TCP/IP 443번 포트를 사용하여 통신한다.
SSL 은 인증 받은 신뢰 기관인 CA를 통해 공개키 방식을 사용하여, 서버와 클라이언트가 통신할 때 사용 할 대칭키를 안전하게 교환하고, 이를 사용하여 안전하게 통신을 진행한다.
암호화 방식을 통해 구글에서 제공하는 SEO 이점이 생겼으며, HTTP 방식과 다르게 보안성이 크게 향상 되었다.
연결 지향 방식이기 때문에 인터넷이 끊기면 소켓 연결이 끊어져 재연결 및 재 요청, 전송이 이루어져 다소 비효율적이다.
또한 암호키 교환, 암호화 - 복호화 진행 등 서버에 과부하가 생기고, CA 사용료 발생이라는 단점도 있다.
CA 공개키 기법을 활용한 대칭키 교환.
CA ( Certificate Authority ) 는 신뢰하는 민간 서드 파트 인증 기관이다.
서버가 CA에 [서버의 사이트 정보, 서버의 공개키] 를 보내며 인증 요청을 한다.
CA의 개인키로 [서버의 사이트 정보, 서버의 공개키] 를 암호화 하여 사이트 인증서를 발급한다.
사용자는 CA를 신뢰하고 이용하며, 사용자의 브라우저에 CA의 공개키를 저장한다.
사용자가 서버에 접속 요청을 하면, 서버는 CA의 개인키로 암호화된 발급받은 인증서를 제공한다.
사용자는 브라우저에 저장된 CA의 공개키로 인증서를 복호화하고 얻은 [사이트 정보, 사이트 공개키] 를 확인한다.
HTTPS 통신에 사용할 대칭키를 생성하고, 획득한 서버의 공개키로 암호화하여 서버에 전송한다.