Loading Now

HTTP와 HTTPS의 차이: 웹 보안을 위한 SSL과 TLS

HTTP와 HTTPS에 대해서 알아보도록 하겠습니다.

1. HTTP(Hypertext Transfer Protocol)

HTTP는 웹 브라우저와 웹 서버 간의 데이터 전송을 위한 프로토콜입니다. 1990년대 초반에 등장하여, 오늘날에도 웹 페이지, 이미지, 파일 등을 전송하는 데 사용되는 표준 프로토콜입니다.

프로토콜은 네트워크에서 두 장치가 서로 통신할 때 따르는 규칙과 절차를 의미

하지만 HTTP는 기본적으로 암호화되지 않은 통신입니다. 즉, HTTP로 주고받는 데이터는 평문(Plaintext)로 전송되기 때문에 보안이 취약합니다. 즉, 악의적인 의도를 갖고 있는 제 3자가 중간에서 데이터를 가로채거나 조작할 수 있게 됩니다.

암호화와 복호화에 대한 설명 (더보기)

– 평문

평문(Plaintext)은 암호화되지 않은 원본 그대로의 메세지라고 보시면 됩니다.

예를 들어, 우리가 카톡으로 친구와 대화를 할 때 “밥 먹었어?”라고 전송을 할 때 무선인터넷을 통해서 “밥 먹었어?”라는 메세지가 그대로 흘러가게 됩니다.

이때 중간에 나쁜 의도를 가진 해커가 메세지를 가로채면 “밥 먹었어?”라는 메세지를 그대로 볼 수 있게 됩니다. 만약 “밥 먹었어?”와 같은 일상 대화가 아니라 중요한 나의 개인정보 또는 사진이라면 굉장히 무서운 일이 됩니다.

따라서, 기본적으로 우리가 사용하고 있는 장치들에서 모든 메세지(데이터)는 암호화 되어 전송됩니다.

– 암호화

암호화는 “밥 먹었어?”라는 메세지를 중간에 가로채더라도 읽을 수 없도록 하는 보안 기술입니다.

“밥 먹었어?”라는 메세지를 중간에 가로채더라도 읽을 수 없게 하려면 어떻게 해야 할까요?

다른 말로 바꿔서 보내면 됩니다. 메세지를 주고 받는 사람과의 어떠한 약속(암호알고리즘)을 하고 규칙(키)를 정하여 “밥 먹었어?”라는 말을 다른 말로 바꾸는 겁니다.

예를 들어, ㅂ->ㅇ, ㅁ->ㄱ으로 바꿔서 보내자라고 약속을 하고 메세지를 보내게 되면

“밥 먹었어?” -> “앙 걱었어?”가 됩니다.

반대로, 메세지를 받는 친구는 규칙을 반대로 적용하면 “밥 먹었어?”라는 걸 이해할 수 있습니다.

이러한 과정을 암호화 과정이라고 하며, 이렇게 메세지를 주고 받게 되면 중간에 메세지를 가로채더라도 진짜 메세지의 내용을 알기 어렵습니다.

이러한 보안 문제를 해결하기 위해 등장한 것이 HTTPS 입니다.


2. HTTPS(Hypertext Transfer Protocol Secure)

HTTPS는 HTTP의 기본적인 기능에 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security)라는 암호화 프로토콜을 추가하여 통신을 암호화하고 더 안전하게 만든 프로토콜이다.

기존의 HTTP보다 안전성을 강화하기 위해서 만들어졌다. 데이터를 보호하고 데이터가 변조되었는지 알 수 있는 무결성을 보장하고, 나와 통신을 하는 서버가 신뢰할 수 있는지를 확인하는 인증 기능이 추가되었다.

2.1 HTTPS의 작동 방식

HTTPS는 기본적으로 SSL/TLS 프로토콜을 사용하여 데이터를 암호화한다. 이 과정에서 암호화를 위해 처음 통신을 할 때 핸드셰이크라는 과정을 통해서 키를 교환한다.

SSL과 TLS 핸드셰이크 과정 (더보기..)
  1. 클라이언트 헬로(Client Hello) : 클라이언트는 서버에 연결을 요청하고, 내가 사용할 수 있는 암호화 알고리즘 목록을 서버에 보낸다.
    쉽게 설명하면, 외국인을 처음 만났을 때 외국인에게 어떤 언어를 할 수 있는지 물어보는 과정이다. 서로가 어떤 언어로 말할 수 있는지 알아야 서로 대화를 할 수 있기 때문이다.
  2. 서버 헬로(Server Hello) : 서버는 클라이언트의 요청을 수락하고, 사용할 암호화 알고리즘과 함께 자신의 인증서를 클라이언트에게 보낸다. 인증서는 서버가 신뢰할 수 있는 서버라는 것을 인증기관을 통해 검증할 수 있다.
    쉽게 설명하면, 외국인이 어떤 언어로 말할 수 있는 지 알려주면서 나는 사기꾼이 아니에요. 라는 것을 증명할 수 있는 국가에서 인증한 서류를 보여주는 거?
  3. 세션 키 교환 : 클라이언트는 서버의 인증서를 검증한 후, 서버와 암호화된 통신을 하기 위해 세션 키를 교환한다.
    쉽게 말하면, 서로 어떤 언어를 사용할 수 있는 지 알았기 때문에 이제 어떤 규칙으로 말을 바꿔서 얘기할 지 정하는 과정. 세션 키는 예를들어 자음을 순서대로 작성했을 때, 두개 옆에 있는 자음으로 바꾸자. 라는 규칙이 있을 때, 두개라는 값은 키가 된다.
  4. 암호화된 통신 시작 : 이후 클라이언트와 서버는 세션 키를 사용하여 안전하게 암호화된 통신을 시작한다.
    서로 언어와 규칙을 정했기 때문에 이제 서로 대화를 시작한다.

HTTP와 HTTPS의 차이점은 아래 표와 같습니다.

HTTPS는 사이트가 인증서를 발급 받아서, 해당 사이트 신뢰할 수 있는 사이트라는 것을 보여줍니다.

이 사이트가 HTTPS인지 HTTP인지 알 수 있는 방법은 위의 주소 창을 통해서 알 수 있습니다.

요즘에는 주소 창에서 http://와 https://를 제외하고 주소를 보여주지만, 더블 클릭해서 보게 되면 전체 주소를 볼 수 있습니다.

또한 http://의 경우 기본적으로 사용자에게 위험한 사이트라는 경고를 주게 되어 있고, 접속을 못하게 막습니다. 따라서 내가 방문하고 있는 사이트가 https://인지 걱정할 필요는 없습니다. 왜냐하면 내가 아무런 문제 없이 사이트를 들어왔다면 대부분 https://이기 때문입니다.

그래도 확인하고 싶다면 주소 왼쪽 부분에 있는 ‘사이트 정보 보기‘를 눌러서 확인하실 수 있습니다.

HTTP와 HTTPS 그리고 간단한 SSL/TLS 알려드렸습니다.

HTTPS는 워드프레스를 위해서 블로그를 운영하실 때 안전하게 운영하기 위해서 필수적으로 사용해야 합니다. 따라서 간단한 이론 정도는 알고 계시면 운영하는데 도움이 될 수 있을 거 같습니다.

감사합니다.

한줄 요약!

HTTP는 웹 통신을 위한 사람들 간의 약속. 하지만 안전하지 않았어 그래서 더 안전한 약속이 필요했음.

HTTPS는 더 안전한 웹 통신을 위해서 SSL/TLS를 프로토콜을 사용함. 그래서 더 안전한 웹 통신을 할 수 있음.


Post Comment