HTTP, HTTPS 프로토콜이란?




1. HTTP Header Content-Type Field란?



Content-Type이란 말 그대로 사용자 요청과 응답 메시지 타입을 뜻하며, 크게 Discrete-Type 과 Composite-Type으로 나뉩니다.


또한, 문법으로 아래와 같은 형태를 가집니다.




Content-Type(필드명): text(타입)/plain(서브타입); charset=us-ascii(파라메터)


Discrete-Type: 그 자체로 어떤 의미를 가지고 있는 Content-Type을 나타낸다.


예) "text" / "image" / "audio" / "video" / "application" / extension-token


Composite-Type: Discrete-Type 혹은 Composite-Type의 개체 여러 개가 복합되어 만들어진 타입을 나타낸다.


예)  "message" / "multipart" / extension-token




MIME Type 참고 사이트


http://www.iana.org/assignments/media-types/index.html






즉, 아래 그림의 Accept 필드는 응답 시 브라우저가 허용할 수 있는 메시지 타입을 가리키며, Content-Type은 그에 따른 응답 메시지 타입을 나타내는 것입니다.








2. HTTP란?



HTTP란 간단히 말해 웹 브라우저와 웹서버 간에 메시지 교환 프로토콜입니다. 즉, 일종의 대화 규칙이며, 교환 방식은 복잡한 바이너리 데이터가 아닌 단순 텍스트를 통해 이루어집니다.


위에서 설명한 Content-Type의 응답 메시지(html, xml, 등..)또한, 단순 텍스트로 교환되며, 


만약 누군가가 주고받는 네트웍 패킷을 가로채 볼 수 있다면, 메시지 내용이 그대로 보이게 되므로 보안상 치명적 결과를 가져올 수 있는 상황입니다.


즉, 컨텐츠 보안이 필요한 경우에는 HTTPS 프로토콜을 사용하여, 주고받는 네트웍 패킷을 알고리즘을 통해 모두 암호화 해야 할 필요가 있습니다.




3. HTTPS란?



HTTPS는 HTTP와 같은 통신 프로토콜이며, 쓰임새(메시지 전송) 또한, HTTP와 거의 흡사합니다.


하지만 HTTPS는 앞서 설명했던 HTTP의 취약점을 보완하기 위해 주고받는 모든 메시지를 암호화하며, 암호화 방식에 쓰이는 Key의 종류로는 크게 대칭과 비대칭 둘로 나뉘게 됩니다.


간단히 동작원리에 대해 설명하자면, 클라이언트(웹 브라우저)와 서버(웹서버)가 서로 교환한 세션키(대칭키)로 주고받는 모든 컨텐츠 내용을 암호화합니다.


즉, 중간에 네트웍 패킷을 가로챈다 해도 암호화된 내용이 노출되므로 보안상 안전하며, 공유된 세션키(대칭키)를 모르는 상황에서 암호화를 푼다는 것은 모든 경우의 키를 대입해야 한다는 말이 됩니다.


만약 1024 비트(보통은 128비트 암호화)의 암호화라면, 평균적으로 2의 512승을 대입해야하며, 이것은 2475880078570760000000000000.00이라는 수를 대입해야 한다는 뜻과 같습니다.


이 숫자는 아무리 빠른 컴퓨터(현재까지 나온..)라 할지라도 약 몇 천 년에 걸려 계산되어야 할 것 입니다.



위에서 설명한 내용 중 세션키 교환 동작과 같은 더 자세한 설명은 다음 포스트 주제인 SSL 동작원리에서 다루도록 하겠습니다.




HTTP or HTTPS 주고받는 메시지 비교




게시판 글등록: 





글 등록시 Post로 주고 받는 패킷


보시는 바와 같이 사용자에 의해 기입되었던 title 및 content 등의 모든 내용이 그대로 노출되는것을 확인 할 수 있습니다.






HTTPS 프로토콜과 SSL 보안 인증서를 활용한 페이지에서 주고 받는 패킷








아래 그림과 같이 주고받는 모든 메시지 내용이 HTTP와는 다르게 해당 알고리즘에 의해 암호화 되어있습니다.