본문 바로가기

컴퓨터 네트워크

[컴퓨터 네트워크 스터디] HTTP/HTTPS & SSL/TLS, & DNS & 대칭키 암호화/ 공개키 암호화

더보기

📌 오늘 학습 목표

1️⃣ HTTP와 HTTPS 의 개념을 알고 차이점을 이해한다

2️⃣ 공개키와 대칭키 암호화에 대해 이해한다

3️⃣ SSL/TLS의 개념을 이해한다

4️⃣ DNS의 개념을 이해한다

5️⃣ 각 개념을 면접 답변 형식으로 이야기해본다

Chapter 1. HTTP

HTTP(Hyper Text Transfer Protocol): 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜

  • 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약이며 브라우저로 데이터를 전송해주는 용도로 많이 사용
  • 기본 포트인 80번 포트에서 서비스 대기 중이며, 클라이언트가 TCP 80 포트를 사용해 연결하면 서버는 요청에 응답함
  • HTTP는 정보를 "텍스트"로 주고 받음. 따라서 전송 신호를 인터셉트하는 경우 데이터 유출이 발생할 수 있음.
프로토콜이란 ? : 컴퓨터 내부에서 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계를 의미한다.

 

HTTP의 구조

  • HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동함
  • HTTP는 상태를 가지고 있지 않는 Stateless 프로토콜이며 Method, Path, Version, Headers, Body 등으로 구성됨

그러나, HTTP는 서버에서부터 브라우저로 전송되는데 이때, 암호화가 되지 않은 평문 데이터를 전송하기 때문에
제 3자가 정보를 조회할 수 있다는 문제점이 있다. (데이터 유출)

 

따라서 이를 해결하기 위해 HTTPS가 등장하게 되었다.

 

🧑🏻 HTTP의 요청/ 응답 모델에 대해 설명해주세요.

  • 요청 메서드: 요청의 종류를 나타냅니다. 예를 들어, GET, POST, PUT, DELETE 등이 있습니다.
  • 요청 URI: 요청하는 리소스의 위치를 나타냅니다.
  • 요청 헤더: 요청에 대한 추가 정보를 나타냅니다.
  • 요청 본문: 요청에 대한 데이터를 나타냅니다.

응답 메시지에는 다음과 같은 정보가 포함됩니다.

  • 응답 상태 코드: 응답의 상태를 나타냅니다. 예를 들어, 200 OK, 404 Not Found, 500 Internal Server Error 등이 있습니다.
  • 응답 헤더: 응답에 대한 추가 정보를 나타냅니다.
  • 응답 본문: 응답에 대한 데이터를 나타냅니다.

 

🧑🏻 HTTP 메서드 중 GET과 POST의 차이점은 뭔가요?

GET과 POST는 둘 다 HTTP 요청 메서드입니다. 차이점은 4가지가 있는데 비교하며 설명해보겠습니다.
GET은 웹 브라우저가 웹 서버에 리소스를 요청하는 데 사용됩니다. POST는 웹 브라우저가 웹 서버에 데이터를 전송하는 데 사용됩니다.
GET 요청은 URL에 데이터를 포함합니다. POST 요청은 본문에 데이터를 포함합니다.
GET 요청은 보통 웹 페이지를 로드하거나 검색을 수행하는 데 사용됩니다. POST 요청은 보통 양식을 제출하거나 데이터를 업로드하는 데 사용됩니다.
GET 요청은 보통 POST 요청보다 빠릅니다. GET 요청은 보통 POST 요청보다 보안이 취약합니다.

 

🧑🏻 HTTP 메서드 중 PUT 과 PATCH의 차이점은 뭘까요?

PUT은 리소스를 생성하거나 리소스를 완전히 대체하는 데 사용됩니다. PATCH는 리소스를 부분적으로 수정하는 데 사용됩니다.UT 요청은 리소스의 본문에 리소스의 새 데이터를 포함합니다. PUT 요청은 리소스가 존재하지 않으면 리소스를 생성하고, 리소스가 존재하면 리소스를 완전히 대체합니다. PATCH 요청은 리소스가 존재하지 않으면 404 Not Found 응답을 반환하고, 리소스가 존재하면 리소스를 부분적으로 수정합니다.

 

🧑🏻 HTTP 헤더가 뭘까요?

HTTP 헤더는 HTTP 요청과 응답의 일부로 사용되는 메타데이터입니다. HTTP 헤더는 요청과 응답의 세부 정보를 제공하며, 웹 브라우저와 웹 서버 간의 통신을 이해하고, 문제를 해결하는 데 도움이 됩니다.

 

🧑🏻 HTTP의 무상태성(Stateless)에 대해서 설명해주세요.

HTTP는 무상태 프로토콜입니다. 무상태 프로토콜은 이전 요청과 응답에 대한 정보를 저장하지 않는 프로토콜입니다. HTTP는 클라이언트와 서버 간의 각 요청을 독립적으로 처리합니다. 만약 HTTP가 상태를 저장한다면, 각 요청과 응답에 대한 상태를 저장해야 합니다. 이는 많은 양의 메모리를 필요로 합니다.

HTTP가 무상태 프로토콜이기 때문에, 클라이언트와 서버는 서로의 상태를 추적하기 위해 쿠키, 세션 등을 사용합니다.

Chapter 2. HTTPS

HTTPS(Hypertext Transfer Protocol secure): HTTP에 데이터 암호화가 추가된 프로토콜

  • SSL을 사용하여 암호화를 지원
  • HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 공개키 암호화를 지원하고 있음
    (이 때문에 http보다 조금 느린 속도)

 

📌HTTP와 HTTPS의 차이점

  • 앞서 언급하였듯 데이터 암호화 즉, SSL 인증서의 유무가 다름
  • 검색엔진 최적화(SEO)에 있어서 사이트가 더 상단에 노출됨
    (Google은 HTTPS를 적용한 사이트에게 더 상위권에 노출될 수 있도록 가산점을 부여함

 

📌SSL 인증서

  • 웹사이트의 ID를 인증하고 암호화된 연결을 가능하게 하는 디지털 인증서
  • 웹 서버와 웹 브라우저 사이에 암호화된 링크를 생성하게 해주는 보안 프로토콜 (쉽게 말해 데이터를 암호로 바꿔줌)
  • 공개키/개인키 기반으로 데이터를 암호화하기 때문에 데이터는 암호화되고 전송되어 임의의 사용자가 데이터를 조회하여도 원본의 데이터를 보는 것은 불가능하게 해줌

 

🧑🏻 HTTPS 에 대해서 설명해주세요.

HTTPS는 HTTP(Hyper Text Transfer Protocol)의 보안 버전입니다. HTTPS는 HTTP에 데이터 암호화, 데이터 무결성, 서버 인증 총 3가지 암호화 기능을 추가하여 데이터를 보호합니다.

 

🧑🏻 HTTPS 연결 과정에 대해 설명해주세요. 

1️⃣ 클라이언트(브라우저)가 서버로 최초 연결 시도를 함
2️⃣ 서버는 공개키(엄밀히는 인증서)를 브라우저에게 넘겨줌
3️⃣ 브라우저는 인증서의 유효성을 검사하고 세션키를 발급함
4️⃣ 브라우저는 세션키를 보관하며 추가로 서버의 공개키로 세션키를 암호화하여 서버로 전송함
5️⃣ 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻음
6️⃣ 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터를 전달할 때 세션키로 암호화/복호화를 진행함

 

Chapter 3. 대칭키 암호화와 비대칭키 암호화

HTTPS는 대칭키 암호화 방식과 비대칭키 암호화 방식을 모두 사용하고 있다. 각각의 암호화 방식은 다음과 같다.

📌 대칭키 암호화 ( Symmetric key algorithm ) 

  • 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행함
  • 키가 노출되면 매우 위험하지만 연산 속도가 빠름

 

📌 대칭키 암호화 ( Asymmetric key algorithm )

  • 1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용함
  • 한마디로 비대칭키 암호화 방식에선 키가 2개
  • 키가 노출되어도 비교적 안전하지만 연산 속도가 느림
  • 한 쌍의 키로 암호화, 복호화를 하는 방식을 RSA 알고리즘 
  • CPU 리소스를 크게 소모함

 

 

대칭키는 비교적 쉬운 개념이므로, 비대칭키 암호화에 대해 조금 자세히 살펴보도록 하자.

비대칭키 암호화는 공개키/개인키 암호화 방식을 이용해 데이터를 암호화하고 있다. 공개키와 개인키는 서로를 위한 1쌍의 키이다.

  • 공개키: 모두에게 공개가능한 키
  • 개인키: 나만 가지고 알고 있어야 하는 키

 

암호화를 공개키로 하느냐 개인키로 하느냐에 따라 얻는 효과가 다른데, 공개키와 개인키로 암호화하면 각각 다음과 같은 효과를 얻을 수 있다.

  • 공개키 암호화: 공개키로 암호화를 하면 개인키로만 복호화할 수 있다. -> 개인키는 나만 가지고 있으므로, 나만 볼 수 있다.
  • 개인키 암호화: 개인키로 암호화하면 공개키로만 복호화할 수 있다. -> 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장할 수 있다.

 

 

 

Chapter 4. SSL/TLS

📌 SSL( Secure Sockets Layer )

Secure Sockets Layer, SSL은 웹사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술입니다. 이 기술은 해커가 개인 데이터나 금융 데이터 등의 전송되는 정보를 보거나 훔치는 것을 방지합니다.

 

📌 TLS ( Transport Layer Socket )

SSL 3.0 표준을 기반으로 설계된 상위 버전으로, 네트워크 상에서 데이터를 안전하게 전송하기 위한 보안 프로토콜입니다.

TLS는 Handshake 과정에서 클라이언트와 서버 간의 인증과 암호화를 수행하여 전송 계층 종단 간 보안과 데이터 무결성을 확보합니다.

 

🧑🏻 SSL/TSL이 뭔가요?

SSL/TLS는 Secure Sockets Layer/Transport Layer Security의 약자로, 인터넷에서 데이터를 암호화하여 전송하는 프로토콜입니다

SSL(전송 계층 보안)은 컴퓨터 네트워크를 통해 통신 보안을 제공하는 C 언어로 작성된 암호화 프로토콜입니다. 암호화를 사용하여 데이터의 무결성과 기밀성을 보호합니다.

TLS(전송 계층 보안)는 인터넷을 통한 보안 통신을 위한 표준입니다. 클라이언트/서버 애플리케이션이 도청 및 정보 변조를 방지하도록 설계된 방식으로 네트워크를 통해 통신할 수 있도록 합니다.

 

Chapter 5. DNS( Domain Name System )

Domain Name System의 약자 DNS는 인터넷의 전화번호부이다. 사용자가 'naver.com' 또는 'google.com'과 같은 도메인 이름을 웹 브라우저에 입력하는 경우 DNS는 해당 사이트의 올바른 IP 주소를 찾는 역할을 한다

DNS(도메인 네임 시스템)은 전세계적으로 약속된 규칙을 공유하는데 상위 기관에서 인증된 기관에게 도메인을 생성하거나 IP 주소로 변경할 수 있는 ‘권한’을 부여한다.

DNS는 이처럼 상위 기관과 하위 기관과 같은 ‘계층 구조’를 가지는 분산 데이터베이스 구조를 가진다.

쉽게 말해 단 한 권의 두꺼운 책에 모든 전화번호를 기입해 찾는 것보다 여러 권으로 나누되, 하위로 연관되어 있는 여러 권으로 나누는 방식을 채택한 것이다.

 

📌 DNS 구성 요소

  • 도메인 네임 스페이스(Domain Name Space) : DNS가 저장 관리하는 계층적 구조
  • 네임 서버(Name Server) : 권한 있는 DNS 서버
  • 리졸버(Resolver) : 권한 없는 DNS 서버

DNS는 앞서 설명했듯이 도메인 이름을 웹 브라우저에 입력하는 경우 해당 사이트의 올바른 IP 주소를 찾는 역할을 수행하기 위해

“이 도메인 이름은 이 IP 주소이다”라는 ‘텍스트’를 저장하는 데이터베이스가 필요하다.

DNS는 계층적으로 구분하는, 정보(도메인과 IP주소)를 분산하는 구조를 갖기 때문에

분산된 데이터가 어디 저장되어 있는지 찾을 프로그램들이 필요하고 찾았으면 해당 IP 주소로 이동할 프로그램(브라우저 등)이 필요하다.

도메인 네임 스페이스라는 규칙(방법)으로 도메인 이름 저장을 분산한다.

네임 서버(DNS 서버와 같은 말, 그런데 리졸버 서버 등 시스템 안에서 다른 역할을 하는 서버도 있기에 그냥 DNS 서버라고 하는 것보다 네임 서버라고 하는게 더 의미가 전달되는 듯)가 해당 도메인 이름의 IP 주소를 찾는다.

리졸버가 DNS 클라이언트 요청을 네임 서버로 전달하고 찾은 정보를 클라이언트에게 제공하는 기능을 수행한다.

 

📌 DNS 동작 방

1️⃣ 웹 브라우저에 http://www.naver.com을 입력하면 먼저 Local DNS에게 "http://www.naver.com"이라는 hostname"에 대한 IP 주소를 질의하여 Local DNS에 없으면 다른 DNS name 서버 정보를 받음(Root DNS 정보 전달 받음)

2️⃣ Root DNS 서버에 "http://www.naver.com" 질의

3️⃣ Root DNS 서버로 부터 "com 도메인"을 관리하는 TLD (Top-Level Domain)(.com을 관리하는 서버) 이름 서버 정보 전달 받음

4️⃣ TLD에 "http://www.naver.com" 질의

5️⃣ TLD에서 "name.com" 관리하는 DNS 정보 전달

6️⃣ "naver.com" 도메인을 관리하는 DNS 서버에 "http://www.naver.com" 호스트네임에 대한 IP 주소 질의

7️⃣ Local DNS 서버에게 http://www.naver.com에 대한 IP 주소 222.122.195.6 응답

8️⃣ Local DNS는 www.naver.com에 대한 IP 주소를 캐싱을 하고 브라우저에게 IP 주소 정보 전달

 

🧑🏻 DNS이 뭔가요?

도메인 이름을 사용했을 때 입력한 도메인을 실제 네트워크상에서 사용하는 IP 주소로 바꾸고 해당 IP 주소로 접속하는 과정이 필요합니다. 여기서의 접근 과정, 전체 시스템을 DNS(도메인 네임 시스템)라고 합니다.

 

🧑🏻 DNS 질의 종류에 대해 설명해주세요.

  • 재귀적 질의

사용자가 Local DNS 서버에 query를 보내면 Local DNS server가 Root name 서버에 query를 보내고, Root 서버는 자신의 서버에 없으면 해당 TLD 서버에 요청합니다. 이렇게 재귀적으로 실제 도메인 정보를 가지고 있는 서버까지 query가 이동하여 IP 주소를 얻는 방법입니다. 재귀적인 방법은 Root 서버에 너무 큰 부담을 준다는 단점이 있습니다.

  • 반복적 질의

사용자가 Local DNS 서버에 query를 보내면 Local DNS 서버가 Root name 서버에 query를 보내 TLD 서버의 주소를 반환받고, 다시 TLD 서버에 query를 보냅니다. 이렇게 최종 IP 주소를 받을 때까지 요청과 응답을 계속해서 Local DNS 서버가 반복하는 방법입니다.