본문 바로가기

Web/Theory

HTTP & HTTPS

728x90

Server & Port

일반적으로 인터넷 접속을 한다는 것은, 간단하게 물리적인 하나의 컴퓨터(=서버)에 접속하는 것이라고 생각할 수 있습니다.
이러한 인터넷은 보통 TCP/IP기반의 네트워크를 통해서 여러대의 서버를 하나의 연결된 네트워크 결합체로 제공합니다.

물리적인 하나의 컴퓨터에서도 여러 개의 서버가 동작할 수 있으며, 각각의 서버들은 Port로 구분되어서 동작합니다.
웹은 주로 80번 포트, 이메일은 25번 포트, FTP는 21번 포트를 사용합니다.

인터넷 중에서도 웹서비스는 서로 통신하기 위해서 HTTP 프로토콜을 사용합니다.

HTTP(Hypertext Transfer Protocol)

HTTP는 서버와 클라이언트가 인터넷상에서 HTML을 주고 받기 위한 프로토콜을 의미합니다.
HTTP는 계속 발전하여, 현재는 HTTP/2까지 등장한 상태이며, 아직은 HTTP v1.1이 가장 많이 사용되고 있다고 합니다.

작동방식

HTTP는 서버/클라이언트 모델을 따릅니다. 

1) 클라이언트가 서버에게 연결 시도
2) 연결 성공 시, 클라이언트가 서버에게 Request
3) 서버가 클라이언트에게 Response
4) 클라인트와 서버 간 연결 종료

여기서, 연결을 끊어버리는 특성 때문에 불특정 다수를 대상으로 하는 서비스에 적합하다는 장점도 있지만, 서버가 클라이언트의 이전상황을 알 수가 없다는 단점도 있습니다. 이러한 HTTP를 무상태(=stateless) 프로토콜이라고 불리우며, 이러한 특징 때문에 정보를 유지하기 위해서 Cookie와 같은 기술이 등장하게 되었다고 합니다.

서버와 클라이언트 간 연결을 계속 유지한 채, 실시간 응답성을 보장받을 수 있는 기술로는 WebSocket이라는 기술이 있습니다.

URL(Uniform Resource Locator)

URL은 인터넷 상의 자원의 위치를 나타내며, 특정 웹 서버 특정 파일에 접근하기 위한 경로를 제공합니다.

URL은 크게 세 부분으로 나뉘어집니다(프로토콜, IP주소 또는 도메인 이름, 자원의 위치)

여기서 물리적인 서버를 찾기 위해서 반드시 필요한 것은 IP주소나 도메인 주소이며, 물리적인 컴퓨터를 찾은 후에 해당 컴퓨터 안에 등장하는 소프트웨어 서버를 찾기 위해서는 포트 값이 필요합니다. 간단하게 IP는 컴퓨터 당 한개, 포트는 한 컴퓨터에 여러개, 그리고 각 소프트웨어 서버는 하나의 포트에 한개와 매핑되게 됩니다(i.e. HTTP 웹 서버는 기본 포트 값이 80)

HTTP Format

HTTP에 요청 메시지는 헤더, 바디로 구분할 수 있습니다.

헤더는 요청 Method(GET, POST, PUT, DELETE)와 URI, 그리고 HTTP 프로토콜 버전으로 이루어 집니다.
그 아래 각각의 줄은 헤더 명과 헤더 값이 콜론으로 구분되어져 있습니다.

바디는 GET은 요청시에는 아무 정보가 없고(변수들을 URI에 붙여서 가져감), POST나 PUT 방식에서는 서버로 업로드할 데이터를 바디에 기록해서 보내게 됩니다.

HTTP에 응답 메시지도 헤더, 바디로 구분할 수 있습니다.

헤더의 첫 줄에는 응답 HTTP 프로토콜의 버전, 그리고 응답 코드와 메시지로 이루어 집니다.
그리고 나머지 헤더 부분에는 날짜, 웹 서버 이름과 버전, 콘텐츠 타입, 등의 정보가 나오게 됩니다.
클리언트로 전송하기 위한 Data는 바디에 담겨져 보내지게 됩니다.

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)

사이트에 로그인 할 때 보통 ID와 Password를 적어서 서버로 보내게 되는데요, 이 때 이러한 정보들이 유출된다면, 정말 큰 사고가 아닐 수 없습니다. 그래서 보통 클라이언트쪽에서 이러한 민감한 정보들을 암호화하여 보내고, 받는 서버쪽에서는 받은 암호화 정보를 다시 복호화하여 사용하게 되는데, 이러한 상황에서 사용하게 되는 프로토콜이 HTTPS 입니다.

HTTPS는 기존의 HTTP 방식의 보안상의 약점을 보안하기 위해 SSL을 적용하여 데이터를 공개키 방식을 통해 암호화하고 인증의 방식을 통해 보안성을 높인 모델이라고 할 수 있으며, 포트번호는 443을 사용합니다.

이 HTTPS 프로토콜에서는 Hybrid(대칭키+공개키)의 암호화 방법을 사용합니다.

대칭키: 하나의 키로 암호화, 복호화를 진행하며, 내가 가지고 있는 키를 상대방도 가지고 있어야 합니다.
공개키: 암호화를 하는 쪽에서는 Public Key를 사용하고, 복호화를 하는 쪽에서는 Private Key를 사용하는 방식.

작동방식

1) 클라이언트가 서버에게 연결을 시도하고, CA(Public Key를 가지고 있는 인증서)를 받음
2) 클라이언트는 받은 공개키를 사용하여 클라이언트 본인의 대칭키를 암호화 함
3) 클라이언트는 본인의 대칭키를 사용하여, 민감한 정보들을(ID, PW) 암호화 함
4) 클라이언트에서 서버로 HTTPS 프로토콜을 사용하여 전송
5) 서버는 본인이 가지고 있는 Private Key를 사용하여, 클라이언트로부터 받은 대칭키를 복호화 함
6) 서버는 복호화 된 대칭키를 사용하여, 민감한 정보들을 복호화 함

공개키 하나만을 사용해서도, 위와 같은 암호화-복호화 과정을 구현할 수 있지만, 공개키 방식으로 암호화-복호화를 하는 과정이 대칭키를 사용하는 것 보다, Computing Power를 많이 필요로 하기 때문에, 위와 같이 공개키 방식으로 대칭키를 암호화-복호화 하고, 중요한 정보들은 대칭키를 사용하여 암호화-복호화 하는 방식으로 되어 있다고 합니다.

더 자세한 내용은 아래 링크에 잘 나와 있습니다!

 

HTTPS와 SSL 인증서 - 생활코딩

HTTPS VS HTTP HTTP는 Hypertext Transfer Protocol의 약자다. 즉 Hypertext 인 HTML을 전송하기 위한 통신규약을 의미한다. HTTPS에서 마지막의 S는 Over Secure Socket Layer의 약자로 Secure라는 말을 통해서 알 수 있듯이 보안이 강화된 HTTP라는 것을 짐작할 수 있다. HTTP는 암호화되지 않은 방법으로 데이터를 전송하기 때문에 서버와 클라이언트가 주고 받는 메시지를 감청하는 것이

opentutorials.org

 

The First Few Milliseconds of an HTTPS Connection

Convinced from spending hours reading rave reviews, Bob eagerly clicked “Proceed to Checkout” for his gallon of Tuscan Whole Milk and… Whoa! What just happened? In the 220 milliseconds that flew by, a lot of interesting stuff happened to make Firefox chang

www.moserware.com

 

'Web > Theory' 카테고리의 다른 글

Web Server & WAS  (0) 2019.07.30