HTTP(Hypertext Transfer Protocol)와 HTTPS(Hypertext Transfer Protocol Secure)는 인터넷에서 데이터를 전송하는데 사용되는 프로토콜이다. 하지만 두 프로토콜 간에는 중요한 차이점이 있다.

HTTP

HTTP는 텍스트 기반의 프로토콜로, 데이터를 평문1)으로 전송한다. 평문은 변형이 없는 데이터이고 누구나 데이터를 볼 수 있기 때문에 보안 문제가 발생할 수 있다. 그래서 크롬에서 HTTP로 통신하는 웹사이트에 접근할 경우 아래와 같이 경고창이 뜬다.

HTTP의 취약점은 여러 가지가 있지만 대표적으로 다음과 같다.

  1. 중간자 공격: HTTP는 암호화되지 않은 통신을 사용하기 때문에 클라이언트와 서버 사이에서 사용자의 개인 정보를 탈취하거나 조작할 수 있다.
  2. 세션 하이재킹: 서버와 정상 통신하고 있는 사용자의 세션을 탈취하여, 해당 사용자로 위장하여 서버로 접근할 수 있다.
  3. DDOS 공격에 취약하다.

등등 다양한 보안 문제가 발생한다. 이를 보완하기 위해서 HTTPS와 같은 보안 프로토콜을 사용한다.

HTTPS

HTTPS는 SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)라는 프로토콜을 함께 사용해서, 클라이언트와 서버 간의 통신을 암호화하고, 인증서를 이용해서 서버의 신원을 확인한다. 이 때문에 개인정보나 금융정보 등을 다루는 웹 사이트에서는 HTTPS를 사용하는 것이 안전하다.
SSL과 TLS는 공개키 암호화 방식과 대칭키 암호화 방식을 사용하여 데이터를 암호화한다.

공개키 암호화 방식

공개키 암호화 방식은 암호화와 복호화에 사용되는 키가 서로 다른 방식이다. 암호화할 때는 공개키를 사용하고, 복호화할 때는 해당 공개키와 쌍을 이루는 개인키를 사용한다. 공개키는 모든 사용자에게 공개되어 있으며, 데이터를 전송할 때는 해당 공개키로 암호화한다. 이후 데이터를 수신한 사람은 개인키를 사용하여 복호화한다. 이 방식을 사용하면 데이터를 안전하게 전송할 수 있다.

대칭키 암호화 방식

대칭키 암호화 방식은 암호화와 복호화에 같은 키를 사용한다. 이 방식은 암호화된 데이터를 전송하기 전에 대칭키로 암호화를 수행하고, 수신자는 해당 대칭키를 사용해서 복호화한다.

SSL과 TLS는 공개키 암호화 방식을 이용하여 대칭키를 안전하게 전송한 후, 대칭키 암호화 방식으로 데이터를 전송한다. 다만, 현재는 SSL에서는 보안문제가 발견되어 사용되지 않으며, TLS 방식이 사용된다.

마무리

HTTPS도 마냥 완벽한 보안을 제공하지 않는다. 그래서 HTTPS를 사용하며 여러가지 보안적인 취약점을 고려해서 웹 사이트를 개발해야 한다. 아직까지 블로그에 쓴 내용 정도로 개념적으로 밖에 알 수 없다. 나중에 로그인 기능이나, 서버와 중요한 내용을 통신하는 기능을 개발할 때는 이 개념이 매우 중요할 것이다.

1) 평문이란 암호 통신에서, 변형이 없는 보통의 정보. 보내려는 공개된 전보문 자체를 이른다.(출처: 네이버 국어사전)

profile
개발자를 꿈꾸는 직장인

1개의 댓글

comment-user-thumbnail
2023년 4월 2일

안녕하세요, 제로베이스 프론트엔드스쿨 멘토입니다. 작성해주신 글 잘 읽었고, 앞으로의 더 나은 블로깅을 응원하는 마음에서 작은 의견을 남기고 갑니다 :)

  • 전체적으로 잘 이해하고 작성해주셨습니다.
  • HTTP의 단점을 설명하실 때 브라우저의 경고창 캡처를 넣어주신 것이 좋았습니다. 이렇게 적절하게 이미지를 첨부해주면, 이해하기도 쉬워지고 글의 퀄리티도 올라가기 때문입니다. 문제점을 잘 이해하고 계시다는 인식도 들구요.
  • minor) HTTPS 부분에서 'SSL과 TLS라는 프로토콜을 함께 사용해서'라고 말씀 주셨는데요, 사실 SSL과 TLS는 같은 프로토콜이며, SSL이 관리 주체와 버전이 바뀌고, 발전하면서 TLS로 이름이 바뀐 것 입니다..! 많이들 헷갈릴 수 있는 부분이라서 말씀드려요.
  • 맨 하단에 적어주신 '1) 평문이란 ...' 이 부분은 본문에서 해당 부분 바로 아래에 적어주셔도 좋을 것 같습니다. 블로그 글 특성상 논문처럼 길고 복잡한 글이 아니기 때문에, 바로 옆에 붙여두셔도 무방할 것 같습니다.
  • 참고하신 링크가 있다면, 하단에 참고 링크를 적어서, 외부의 자료에서 가져온 내용과 내가 주도적으로 학습하고 정리한 내용이 드러날 수 있도록 하면 좋을 것 같습니다.

감사합니다!

답글 달기