HTTP
- Hyper Text Transfer Protocol
- 웹상에서 텍스트를 주고 받는 통신 규약.
- TCP와 UDP, 80번 포트를 사용하여 주로 HTML 문서를 주고 받는다.
- Text를 암호화 없이 Plain으로 주고 받기 때문에 보안에 취약하다.
도청 위험, 사용자 위장 위험, 무결성 보장 불가 등 단점이 있다. - 비연결 지향 방식(요청에 응답 데이터 전송 후 연결 종료) 이기 때문에 간단하여 비용이 적고,
인터넷이 끊겼다가 복구 되어도 서버와 재연결할 필요성이 없다. - 때문에 사용자의 추가적인 요청 시 어떤 사용자의 요청인지, 여러 사용자가 요청 시 각각의 사용자를 구분할 수 없다.
- 따라서 아무나 봐도 상관없는 페이지는 효율적으로 http로 구성하기도 한다.
이 밖의 보안에 민감한 정보를 갖고 있는 사이트들은 https를 사용하여야 한다.
HTTP의 문제점들 ( victorydntmd.tistory.com/286 )
- 비연결성 단점
- 비연결성으로 인한 장점도 있지만, 클라이언트의 요청을 완료하고 나면 해제하는 일은
동일한 클라이언트에 대해서도 앞으로의 모든 요청에 대해 매번 새로운 연결 시도 및 해제의 과정을 거쳐야하므로
오버헤드가 발생한다는 단점이 있다. - 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 통신에 사용할 대칭키를 생성하고, 획득한 서버의 공개키로 암호화하여 서버에 전송한다.
- 서버는 자신의 개인키로 복호화하여 대칭키를 얻는다.
- 안전하게 교환한 대칭키를 사용하여 서버와 사용자간 암호문을 주고받으며 통신한다.