HTTPS란 뭘까? 비전공자 수준으로 알아보도록 하자
HTTPS란 무엇일까요? SSL? HTTP? HTTPS? 비 전공자는 용어마저도 너무나 헷갈립니다. 이번 글에서는 HTTPS에 대해서 알아보도록 합니다. 단! 이번 글은 전공자를 위한 설명이 아닌 비 전공자를 위한 설명입니다. 미리 말하자면 많은 설명이 생략되어 있으며, 암호화 알고리즘이나 암호화 키에 대한 내용은 실제 HTTPS에서 사용되는 내용과 다릅니다. 그러나 큰 개념을 쉽게 설명하기 위함이므로 양해 부탁드립니다.

물론 이렇게 많은 설명을 줄이고 내용을 쉽게 바꾸었다고 해도 한 번 읽는것만으로는 이해가 되지 않을것입니다. 따라서 여러번 읽어보시고 궁금증이 생기는 내용은 댓글 또는 비공개 댓글로 질문을 해주시거나 글 최하단의 이고잉님의 링크를 추가로 참조해 주시기 바랍니다.



HTTP를 먼저 알아보자
먼저 HTTPSHTTP over Secure Socket Layer 의 약자로 즉 SSL(Secure Socket Layer)을 이용한 HTTP 통신 방식을 의미합니다. 그렇다면 먼저 HTTP를 살펴 보아야 하겠습니다. HTTP는 웹 환경에서 브라우저와 웹서버가 통신하는 방법을 말합니다. 보다 정확한 표현으로는 프로토콜(Protocol) 또는 규격, 규약이라고 하지만 깊이 들어가면 너무나 알아야할것들이 많아지기에 이정도만 알아두기로 합니다. (*브라우저란 인터넷 익스플로러나 크롬 등을 의미합니다.)


HTTP의 동작을 간략하게 살펴보자면 크롬이나, 익스플로러 등의 브라우저의 주소창에 특정 웹사이트(웹서버)의 주소를 입력하고 엔터를 치면 웹서버로 요청을 보내게 되고 웹서버는 요청에 대한 페이지를 브라우저에게 응답하게 됩니다. 이때 요청하고 응답하는 내용은 HTTP 메시지 라고 하는 편지(또는 쪽지)같은 형태로 주고 받게 됩니다. 즉 데이터를 주고 받게 되는 것이지요. 요청 대상으로는 페이지 주소가 될수도 있지만 로그인에 관련된 아이디, 패스워드 같은 중요한 데이터도 있습니다.



HTTP의 치명적인 단점. 보안
HTTP는 웹을 지탱하는 심플한 기술이지만 치명적인 단점이 있습니다. 브라우저와 웹서버가 통신함에 있어서 주고 받는 데이터가 암호화 되지 않고 생 날것 그대로 전송 되어진다는 점 입니다.

HTTP는 인터넷이라는 바다를 지나 웹서버와 브라우저가 통신하므로 그 중간 어딘가에서 해커가 중간 통로를 도청하게 된다면 날 것 그대로의 중요한 정보들을 탈취할 수 있습니다. 만약 이러한 데이터가 로그인 기능에서 사용하는 아이디 비밀번호 등의 데이터라면 치명적일 수 있습니다. 뿐만 아니라 정상적인 데이터를 중간에서 악의적으로 변조시킬 수도 있습니다.



그래서 HTTPS가 뭔데?
HTTPS를 정말 단순히 설명하자면 데이터가 암호화 되지 않는 HTTP의 단점을 극복하고자 HTTP에 SSL이라는 기술을 더한것입니다. 여기서 복잡한 암호화 알고리즘이나 SSL의 암호화 전달 방식등에 대해서는 내용이 너무 복잡해지므로 설명하지 않겠습니다. 

HTTPS는 HTTP 통신을 함에 있어서 데이터를 암호화 하여 통신합니다. 따라서 중간에 통신을 도청 할지라도 내용을 알아볼 수 없습니다.



암호화, 암호화 키(Key)
HTTPS는 암호화 통신을 한다고 했습니다. 그럼 또다시 암호화 그리고 암호화 키가 무엇인지 간략하게 알고 있어야 합니다.  비 전공자를 위해 매우 많은 설명이 생략되기 때문에 실제 사실과 많이 다를 수 있습니다. 그래도 대략적인 개념은 같으므로 이점 유의하여 읽어주시기 바랍니다.

데이터 암호화에는 키(key)가 필요합니다. A와 B가 어떤 데이터에 대해 똑같은 암호화 알고리즘을 사용한다면 같은 결과가 나올것이기에 어떤 암호화 알고리즘을 사용하는지만 알아내면 암호화된 데이터일지라도 쉽게 답을 유추할 수 있습니다. 그러나 암호화 키라는 변수를 두면 암호화 결과를 달라지게 하여 예측할 수 없게 됩니다.


따라서 암호화시 사용하는 암호화 키는 매우 중요하며 해커에게 노출되어서는 안됩니다. 그런데 중요한점은 상대방이 암호화된 데이터를 다시 원래 데이터로 복호화 하는 과정에서도 키가 필요하다는 점 입니다. 열쇠로 자물쇠를 잠갔다면 다시 그 열쇠로 열어야 하는것과 같습니다.



따라서 암호화된 데이터를 주고 받기 이전에 통신할 대상과 키를 분배하여 공유해야 합니다. 그런데 아이러니하게도 이 키를 주고 받는 과정에서 이 키가 중간 해커에게 노출될 수 있습니다. 해커가 만약 키를 가로챈다면 데이터를 암호화 하여 통신한다고 하여도 데이터를 마음대로 복호화 하여 들여다 볼 수 있을것입니다. 그럼 그 키를 또 암호화해야 할까요? 그럼 또 그에 대한 암호화 키가 필요하게 될것이고 분명한 해결책이 되지는 못할것입니다.



SSL, 인증서, 인증기관(CA)
SSL(Secure Sockets Layer)은 암호화 통신과 그 암호화 통신에 사용되는 키를 공유할 수 있도록 하는 기술입니다. 이 때 등장하는것이 인증기관입니다. 인증기관CA(Certificate Authority)라고 하는데, 인증기관은 암호화시 사용되는 키를 담은 인증서를 발급하고 관리합니다.

따라서 인증기관은 보안상 매우 중요한 역할을 하기 때문에 전 세계적으로 신뢰받는 기관이 운영합니다. 실례로 모 인증기관 중 하나에서 보안 사고가 발생하여 인증기관 목록에서 제외된 사건이 있습니다. 신뢰를 잃었기 때문이죠.

웹 서버를 운영하는 웹사이트(네이버, 구글, 티스토리..)는 암호화키를 생성하여 자신이 하나는 보관하고 하나는 인증기관에게 넘겨 인증서를 발급 받습니다. 인증기관은 인증서를 발급 및 관리해주는 대신 돈을 받죠. 발급된 인증서는 인증기관 본인이 보관합니다. 


마이크로소프트도 인증기관을 운영중이며, comodo, digicert(디지서트) 등이 있습니다.



HTTPS 통신 과정
인증기관에 인증서를 의뢰할 때 통신시 사용할 암호화 키와 자신의 웹사이트 주소를 넘겨주었고 이를 바탕으로 인증기관은 인증서를 만들어 보관했습니다.

여기서 한가지 알아야 할 사실이 있는데, 브라우저는 이미 인증기관 목록을 가지고 있다는 사실입니다. 브라우저를 개발하는 기업에서 브라우저를 개발할 때 인증기관 목록을 넣어두기 때문입니다. 즉 인터넷 익스플로러와 구글의 크롬 등에는 인증기관 목록이 담겨있는 것이지요.

따라서 브라우저는 웹서버와 통신하기 이전에 인증기관 리스트를 확인하여 인증기관에 현재 자신이 통신하려는 웹서버의 인증서가 있는지 확인하고 있으면 인증서를 받습니다.

인증서에는 웹서버가 인증서를 발급할때 첨부했던 암호화키가 들어있으므로 이것을 가지고 데이터를 암호화하여 웹서버와 통신합니다. 웹서버는 최초 인증서를 발급할 때 사용했던 자신의 암호화키로 복호화 하면 됩니다.

제 3자인 인증기관이 암호화 키를 인증서에 담아 관리하는 SSL을 이용하기 때문에 암호화 키를 분배하는 과정에서 탈취 당하지 않을 수 있으며, 분배된 암호화 키를 통해 암호화 통신을 할 수 있는 것입니다.



우리 주면에서 볼 수 있는 HTTPS
이번에 티스토리측에서도 블로그에 https를 도입하였습니다. 물론 인증서 발급등은 티스토리측에서 제공해 주기 때문에 저희는 설정만 해주면 됩니다.(글 하단 관련글 링크 참조) 크롬으로 제 블로그에 접근하면 주소창에 https:// 가 붙으며, 보안 연결 이라고 되어 있는 것을 보실 수 있습니다. 이는 브라우저가 가지고 있는 인증 기관을 통해 인증서를 얻어 HTTPS로 통신하고 있다는 뜻을 나타냅니다. 만약 정상적이지 않은 인증서나 인증기관을 통해 https를 사용하려 하면 빨간색으로 나타납니다.



보안 연결에 자물쇠 버튼을 클릭하면 하단에 팝업이 나타나는데, 인증서를 클릭합니다.



그럼 현재 통신에 사용중인 인증서 정보가 나타납니다. 현재 제 블로그에서 사용중인 인증서는 디지서트에서 발급받은 인증서라는것을 알 수 있습니다.


익스플로러도 주소창의 자물쇠 버튼을 통해 볼 수 있습니다.


지금까지의 내용이 HTTPS 에 대한 개념 및 동작 방식이었습니다.

다시 한 번 말쓰드리지만 상당히 많은 내용이 생략되었으며, 암/복호화에 대한 내용이나 알고리즘에 대한 설명 및 인증서를 얻는 과정 등의 HTTPS 동작 방식이 실제와 많이 다른 부분이 있으나 이 글에서는 다루지 않았습니다. 다만 큰 개념은 최대한 자세히 설명하려 했습니다. 이부분 양해 부탁드리며, 더욱 정확하고 구체적인 내용이 궁금하시다면 이고잉님의 다음글을 읽어보실것을 추천드립니다. -> https://opentutorials.org/course/1334/4894


관련글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!