[TIL] 250502_Web: HTTP와 HTTPS

지코·2025년 5월 2일
0

Today I Learned

목록 보기
62/66
post-thumbnail

🧚🏻‍♀️ TMI

사실 최근에 기업 1차 면접을 준비하면서 공부하고 노션에 정리해놨던 FE 기술을 복기하면서 velog에 다시 정리 중이다! 역시 복기만큼 나를 겸손하게 하는 건 없는 것 같다 ^.^•••

📌 HTTP란?

HTTP(HyperText Transfer Protocol)웹 상에서 클라이언트와 서버 간에 데이터를 주고 받는 데 사용되는 통신 규약이다.
클라이언트가 서버에 요청을 보내고, 서버가 이에 대한 응답을 반환하는 방식으로 동작한다. HTTP는 비연결성(stateless) 을 특징으로 하여, 한 번의 요청-응답이 끝나면 연결이 종료된다. 또한 통신이 안전하게 연결될 수 있도록 TCP 연결을 사용한다.

HTTP는 HTML, JSON 등 다양한 포맷의 데이터를 전달할 수 있다. 요청과 응답에는 URL 경로, 각종 메서드, 상태 코드와 헤더 등 정해진 몇 가지 정보를 포함한다.

HTTP의 보안을 강화한 HTTPS(HyperText Transfer Protocol Secure)HTTP에 TLS/SSL 프로토콜에 따라 데이터를 암호화하여 전송한다. 이를 통해 보안 상 중요한 정보들을 안전하게 보호해 통신을 주고 받는다.

📌 HTTP와 HTTPS

HTTP의 문제점 ⚠️

  • HTTP는 평문 통신이기 때문에, 도청이 가능하다.
    • 인터넷을 통해 오가는 요청과 응답 데이터가 그대로 노출될 수 있다는 뜻.
  • 통신 상대를 확인하지 않기 때문에, 위장이 가능하다.
  • 데이터의 정확성을 증명할 수 없기 때문에, 변조가 가능하다.

위 세 가지는 다른 암호화하지 않은 프로토콜에도 공통되는 문제점들이다❗️

1️⃣ TCP/IP는 도청 가능한 네트워크이다

TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있다. 패킷을 수집하는 것만으로도 도청할 수 있다. 평문으로 통신을 할 경우 메시지의 의미를 파악할 수 있기 때문에, 암호화하여 통신해야 한다.

보완 방법은? 🤔

  1. 통신 자체를 암호화
    SSL(Secure Socket Layer) or TLS(Transport Layer Security) 라는 다른 프로토콜을 조합함으로써, HTTP의 통신 내용을 암호화할 수 있다. SSL을 조합한 HTTP를 HTTPS(HTTP Secure) or HTTP over SSL 이라고 부른다.
  2. 콘텐츠를 암호화
    말 그대로 HTTP를 사용해서 운반하는 내용인, HTTP 메시지에 포함되는 콘텐츠만 암호화하는 것이다. 암호화해서 전송하면, 수신 측에서는 그 암호를 해독하여 출력하는 처리가 필요하다.

2️⃣ 통신 상대를 확인하지 않기 때문에 위장이 가능하다.

HTTP에 의한 통신에는 상대가 누구인지 확인하는 처리는 없기 때문에, 누구든지 리퀘스트를 보낼 수 있다. IP 주소나 포트 등에서 그 웹 서버에 액세스 제한이 없는 경우, 리퀘스트가 오면 상대가 누구든지 무언가의 리스펀스를 반환한다. 이러한 특징은 여러 문제점을 유발한다.

  1. 리퀘스트를 보낸 곳의 웹 서버가 원래 의도한 리스펀스를 보내야 하는 웹 서버인지를 확인할 수 없다.
  2. 리스펀스를 반환한 곳의 클라이언트가 원래 의도한 리퀘스트를 보낸 클라이언트인지를 확인할 수 없다.
  3. 통신하고 있는 상대가 접근이 허가된 상대인지를 확인할 수 없다.
  4. 어디에서 누가 리퀘스트했는지 확인할 수 없다.
  5. 의미 없는 리퀘스트도 수신한다. ➡️ DoS 공격을 방지할 수 없다.

보완 방법은? 🤔

위 암호화 방법으로 언급된 SSL상대를 확인할 수 있다.
SSL은 상대를 확인하는 수단으로 증명서 를 제공하고 있다. 증명서는 신뢰할 수 있는 제3자 기관에 의해 발행되는 것이기 때문에, 서버나 클라이언트가 실재하는 사실을 증명한다. 이 증명서를 이용함으로써, 통신 상대가 내가 통신하고자 하는 서버임을 나타내고, 이용자는 개인 정보 누설 등의 위험성이 줄어들게 된다.
한 가지 이점을 더 꼽자면, 클라이언트는 이 증명서로 본인 확인을 하고 웹 사이트 인증에서도 이용할 수 있다.

3️⃣ 완전성을 증명할 수 없기 때문에 변조가 가능하다.

여기서 완전성이란 정보의 정확성을 의미한다. 서버 또는 클라이언트에서 수신한 내용이 송신 측에서 보낸 내용과 일치한다는 것을 보장할 수 없다는 것이다.
리퀘스트나 리스펀스가 발신된 후, 상대가 수신하는 사이에 누군가에 의해 변조되더라도 이 사실을 알 수 없다. 이와 같이 공격자가 도중에 리퀘스트나 리스펀스를 빼앗아 변조하는 공격을 중간자 공격(Man-in-the-Middle)이라고 부른다.

보완 방법은? 🤔

MD5, SHA-1 등의 해시 값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 존재하지만, 확실히 확인할 수 있는 것은 아니다. 이를 확실히 방지하기에는 HTTPS를 사용해야 한다. SSL에는 인증이나 암호화, 그리고 다이제스트 기능을 제공하고 있다.

📌 HTTPS

HTTP에 암호화와 인증, 그리고 완전성 보호를 더한 HTTPS

HTTPSSSL의 껍질을 덮어쓴 HTTP라고 할 수 있다. 즉 HTTPS는 새로운 애플리케이션 계층의 프로토콜이 아니라는 것이다. HTTP 통신하는 소켓 부분을 SSL(Secure Socket Layer) or TLS(Transport Layer Security) 라는 프로토콜로 대체하는 것 뿐이다.

HTTP는 원래 TCP와 직접 통신했지만, HTTPS 에서 HTTP는 SSL과 통신하고, SSL이 TCP와 통신하게 된다. SSL을 사용한 HTTPS 는 암호화와 증명서, 안전성 보호를 이용할 수 있게 된다.

HTTPS 의 SSL에서는 공통키 암호화 방식공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용한다. 초기 연결 시, 클라이언트가 서버의 공개키로 공통키를 암호화해서 전송하면, 서버는 개인키로 이것을 복호화해서 공통키를 얻을 수 있다. 이후 연결에서는 속도가 빠른 공통키 암호화 방식을 사용해서 데이터를 주고 받는다.

🤔 공개키 암호화 방식과 공통키(대칭키) 암호화 방식은❓

  1. 공통키(대칭키) 암호화 방식
  • 하나의 키로 암호화와 복호화를 둘 다 수행한다.
  • 대칭키 암호화 방식으로 암호화한 정보를 누군가에게 보낼 때, 암호키도 함께 보내야 한다. 암호키는 암호화가 되지 않은 평문으로, 분실하거나 타인에게 노출되면 보안에 매우 취약할 수 있다.
  • 암호화 연산 속도가 빠르기 때문에, 효율적인 암호화 시스템을 구축할 수 있다.
  • 블록 암호화, 스트림 암호화가 있다.

🔺 단점

  • 키를 어떻게 안전하게 전달하느냐, 관리하느냐가 문제이다.
  • 누가 중간에서 키를 가로채면, 전체 통신이 위험해진다.
  1. 공개키(비대칭키) 암호화 방식
  • 대칭키 암호화 방식의 키 전달의 취약점을 해결하기 위해 나온 방식.

  • 서로 다른 두 개의 키를 사용한다.

    • 공개키: 누구나 볼 수 있다.
    • 개인키: 본인만 가지고 있는다.
  • 공개키로 암호화한 것은 개인키로만 복호화할 수 있다.

  • 진행 과정

    • 사용자 B는 자신의 공개키를 공개한다. 이 공개키는 암호화에 사용되는 키이며, 누구든지 열람이 가능하다.
    • 사용자 A는 사용자 B의 공개키로 데이터를 암호화한다.
    • 암호화된 문서를 사용자 B에게 전달한다.
    • 사용자 B는 자신만의 개인키를 이용해, 전송 받은 암호화 문서를 복호화하여 데이터를 열람한다.

🔺 단점

  • 암호화/복호화를 위해 복잡한 수학 연산을 사용하기 때문에, 대칭키 방식에 비해 속도가 느리고 복잡하다.
  • 큰 데이터에는 비효율적이다.

➡️ 대칭키 암호화의 장점과 공개키 암호화의 장점을 채택해, 용량이 큰 정보는 대칭키로 암호화하고, 암호화에 사용된 대칭키는 공개키로 암호화하여 전달하는 하이브리드 암호화 방법이 일반적으로 사용되고 있다.

🤔 모든 웹페이지에서 HTTPS를 사용해도 될까?

평문 통신에 비해 암호화 통신은 CPU나 메모리 등 리소스를 더 많이 요구한다. 통신할 때마다 암호화를 하면 추가적인 리소스를 소비하기 때문에, 서버 한 대당 처리할 수 있는 리퀘스트의 수가 상대적으로 줄어들게 된다.

하지만 최근에는 하드웨어의 발달로 인해 HTTPS를 사용하더라도 속도 저하가 거의 일어나지 않으며, 새로운 표준인 HTTP 2.0을 함께 이용한다면 오히려 HTTPS가 HTTP보다 더 빠르게 동작하게 된다.
따라서 웹은 과거의 민감한 정보를 다룰 때만 HTTPS에 의한 암호화 통신을 사용하는 방식에서, 현재 모든 웹 페이지에서 HTTPS를 적용하는 방향으로 바뀌어가고 있다.

Reference

📄 매일메일 - HTTP란 무엇인지 설명해주세요

profile
꾸준하고 성실하게, FE 개발자 역량을 키워보자 !

0개의 댓글