HTTP (HyperText Transfer Protocol)는 웹브라우저(client)와 서버(server)간의
웹페이지같은 자원(정보)을 주고 받을 때 쓰는 통신 규약이다.
클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜
- 문제점 1) HTTP는 텍스트 통신이라고 할수 있는데 누군가 중간에서 가로챈다면 내용이 노출되어 보안상의 문제가 있다. 2) 통신 상대를 확인하지 않기 때문에 변조가 가능하다.
HTTPS(HyperText Transfer Protocol Secure)는 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer)프로토콜을
이용하여 웹브라우저(client)와 서버가 데이터를 주고 받는 통신 규약이다.
모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화 된다. 또한, HTTP의 하부에 SSL과 같은 보안계층을 제공함으로써 동작한다.
SSL 인증서란 클라이언트와 서버간의 통신을 제 3자가 보증을 해주는 문서이다.
클라이언트가 서버에 접속한 직후에 서버는 클라이언트에게 이 인증서를 전달한다. 그러면 클라이언트는
이 인증서를 보고 신뢰 할수 있는 사람인지 확인을 한 다음에 데이터를 보내는 등 다음 절차를 수행하게 된다.
SSL에서 사용하는 암호화의 종류는 대칭키 방식과, 공개키 방식이 있다.
암호를 만드는 행위인 암호화를 할 때 사용하는 일종의 비밀번호를 키(key)라고 한다. 이 키에 따라서 암호화된
결과가 달라지기 때문에 키를 모른다면 암호를 푸는 행위인 복호화도 할 수 없다. 이 중, 대칭키 방식은 동일한 키로
암호화와 복호화를 할 수 있는 기법을 말한다.
ex) 암호화를 할 때 1234라는 값을 사용했다면, 복호화를 할 때도 1234를 입력해야 복호화가 완료되는 방식이다.
그러나, 대칭키의 단점이 있다. 암호를 주고 받는 사람들 사이에서 이 키(key)로 암호화하라고 사용자에게 전달하는 것이 어렵다는 점이다. 왜냐하면,
중간에 대칭키가 유출된다면 키를 획득한 공격자는 암호의 내용을 복호화하여 무슨 데이터를 전달하려고 했는지 알 수 있기 때문에
HTTPS를 쓰는 이유가 없어진다. 그래서 나온 방식이 바로 공개키 기법이다.
공개키 방식은 대칭키 방식과 다르게 두 개의 키를 가지고 시작
한다. 두 개의 키 중 하나를 비공개키(private key, 개인키.비밀키)라고 부르고
나머지 키를 공개키(public key)라고 말한다. 비 공개키는 자신만이 가지고 있고, 공개키는 타인에게 제공한다.
그럼 내가 발행한 공개키를 받은 타인은 공개키를 이용하여 정보를 암호화하고, 암호화된 정보를 비공개키를 가지고 있는 나에게 다시 전달하면 나는 그 정보를 복호화하여 확인 할수 있다.
ex) 클라이언트가 받은 키(key)를 가지고 1234(정보)를 암호화하여 서버에게 !@#$라는 text 전달 -> 서버는 클라이언트가 보낸 !@#$라는 단어를 비공개키로 복호화하여 1234라는 것을 확인한다.
다시 한번 정리를 해보면 암호화, 복호화 시킬수 있는 서로 다른 키 2개가 존재하는데 이 두개의 키는
서로 1번 키로 암호화하면 반드시 2번키로만 복호화할수 있고 2번 키로 암호화하면
반드시 1번키로만 복호화 할수 있는 룰이 있다.
그 중에서 하나의 키는 모두에게 공개하는 공개키(1번 키)로 만들어서 공개 키 저장소에 등록해 놓는다. 서버는 서버만 알 수 있는 개인키(2번 키)를 소유하고 있으면 된다. 그러면 1번키로 암호화된 http 요청, 즉 https 프로토콜을 사용한 요청이 온다면 서버는 개인키(2번 키)를 이용하여 1번키로 암호화된 문장을 해독하게 된다. 서버는 요청이 무엇인지 알게되고 요청에 맞는 응답을 다시 개인키(2번 키)로 암호화해서 요청한 클라이언트에게 보내주게 된다. 그리고 응답 받은 클라이언트는 공개키(1번 키)를 이용해서 개인키(2번 키) 암호화된 https 응답을 해독하고 사용하는 시나리오다
https 를 지원하는 서버에 요청(request)을 하려면 공개키가 필요하다는 것을 알 수 있다.
즉, 해당 공개키로 서버가 주는 데이터(response)임을 확신할 수 있다.
TCP/IP란 패킷 통신 방식의 인터넷 프로토콜인 IP(인터넷 프로토콜)와 전송조절 프로토콜인 TCP(전송 제어 프로토콜)로 이루어져 있다. IP 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다. TCP는 IP위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP 라고 부르기도 한다.
TCP는 데이터 전달을 관리하는 규칙이다. 즉, 데이터를 작게 나누어서 한쪽에서 다른쪽ㅇ로 옮기고, 이를 다시 조립하여 원래의 데이터로 만드는 규칙이다. 여기서 잘게 나눈 데이터를 패킷이라고 하고 인터넷에서는 정보를 전달하는 단위를 뜻한다. TCP는 패킷을 조립하고, 손실된 패킷을 확인하고, 재저송하도록 요청하는 기능을 한다.
IP는 인터넷상의 주소 규칙이다.
OSI(Open Systems Interconnections) 7계층은 시스템들의 연결을 위한 모델이며, TCP/IP 4계층은 이를 웹 서비스에 맞게 단순화시킨 모델이다.
1. 클라이언트로부터 특정 주소로 요청이 들어오면 DNS 상에서 IP주소를 받아온다. 2. HTTP 계층에서 HTTP 메시지를 작성한다. 3 TCP계층에서 HTTP 메시지를 패킷으로 분해한다. 4. IP계층에서 전송위치를 확인하고 네트워크를 통하여 전송한다. 5. 그 후로 역순으로 진행하여 처리한다.
Reference
https://helols.tistory.com/15
https://medium.com/@chrisjune_13837/web-http-tcp-ip-%EB%A9%94%EC%8B%9C%EC%A7%80%EB%9E%80-4b2721fe296f
https://wayhome25.github.io/cs/2018/03/11/ssl-https/
https://aileen93.tistory.com/119