# 평범한 엔지니어를 위한 HTTPS 가이드

> Clean Markdown view of GeekNews topic #15039. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15039](https://news.hada.io/topic?id=15039)
- GeekNews Markdown: [https://news.hada.io/topic/15039.md](https://news.hada.io/topic/15039.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-05-27T17:33:16+09:00
- Updated: 2024-05-27T17:33:16+09:00
- Original source: [devonperoutky.super.site](https://devonperoutky.super.site/blog-posts/mediocre-engineers-guide-to-https)
- Points: 6
- Comments: 1

## Topic Body

### HTTP 요청의 생애 주기

#### 1. 클라이언트가 요청을 보냄
- **HTTP 요청 생성**: 클라이언트(보통 웹 브라우저)가 HTTP 요청을 생성함.
- **HTTP 메서드**: GET, POST 등.
- **요청된 리소스**: 예를 들어 `/index.html`.
- **프로토콜 버전**: HTTP/1.1 등.
- **헤더와 본문**: `key: value` 형식의 헤더와 선택적 메시지 본문 포함.

#### 2. DNS 조회
- **도메인 이름 변환**: 사람이 읽을 수 있는 도메인 이름(`www.example.com`)을 IP 주소(`93.184.216.34`)로 변환함.
- **DNS 서버 쿼리**: 클라이언트가 DNS 서버에 쿼리를 보내 도메인 이름을 IP 주소로 변환함.

#### 3. TCP 핸드셰이크
- **TCP 연결 설정**: 클라이언트가 서버와 TCP 연결을 설정함.
- **3단계 핸드셰이크**:
  - **SYN**: 클라이언트가 연결 요청을 보냄.
  - **SYN-ACK**: 서버가 요청을 확인함.
  - **ACK**: 클라이언트가 확인 응답을 보냄.

#### 4. HTTP 요청 전송
- **HTTP 요청 전송**: TCP 연결이 설정되면 클라이언트가 실제 HTTP 요청을 보냄.

#### 5. 인터넷을 통한 패킷 라우팅
- **패킷 전송**: 데이터 패킷이 여러 네트워크 장치를 통해 서버로 라우팅됨.
- **라우터 역할**: 라우터가 패킷의 최적 경로를 결정함.

#### 6. 서버 응답
- **HTTP 응답 생성**: 서버가 HTTP 요청을 처리하고 응답을 생성함.
- **응답 내용**:
  - **프로토콜**: 사용된 HTTP 버전.
  - **상태 정보**: HTTP 상태 코드(예: 200, 404).
  - **응답 헤더**: 요청 헤더와 유사함.
  - **응답 본문**: 요청된 콘텐츠(예: HTML 페이지, JSON 데이터).

#### 7. 콘텐츠 렌더링
- **HTTP 응답 처리**: 클라이언트가 HTTP 응답을 받아 처리함.
- **브라우저 렌더링**: 브라우저가 HTML을 해석하고 화면에 콘텐츠를 렌더링함.
- **추가 리소스 요청**: 이미지, CSS, JavaScript 등의 추가 리소스를 요청함.

### HTTPS = HTTP + 암호화

#### TLS 핸드셰이크
- **TLS 핸드셰이크**: 클라이언트와 서버가 암호화 및 인증 키를 교환함.
- **암호화 통신**: TLS 핸드셰이크 후, 클라이언트와 서버는 HTTP를 사용하여 암호화된 메시지를 주고받음.

#### TLS 1.3 핸드셰이크
- **간소화된 과정**: TLS 1.3은 더 적은 옵션을 제공하여 더 간단하고 안전하며 빠름.
- **핵심 단계**:
  - **클라이언트 헬로**: 클라이언트가 지원하는 암호화 스위트와 TLS 버전을 서버에 보냄.
  - **서버 헬로**: 서버가 선택한 암호화 스위트와 TLS 버전을 클라이언트에 보냄.
  - **인증서 검증**: 클라이언트가 서버의 SSL 인증서를 검증함.
  - **프리마스터 시크릿 생성**: 클라이언트가 프리마스터 시크릿을 생성하고 서버에 보냄.
  - **세션 키 생성**: 클라이언트와 서버가 세션 키를 생성함.
  - **보안 통신**: 세션 키를 사용하여 보안 대칭 암호화를 통해 통신함.

### GN⁺의 의견
- **인터넷 통신 이해**: HTTP와 HTTPS의 기본 개념을 이해하면 네트워크 통신의 기초를 잘 다질 수 있음.
- **보안 중요성**: HTTPS를 통해 데이터 전송의 보안성을 높이는 것이 중요함.
- **TLS 1.3의 장점**: 더 간단하고 빠르며 안전한 TLS 1.3을 사용하는 것이 권장됨.
- **실무 적용**: 실제 프로젝트에서 HTTPS를 적용하여 보안성을 강화할 필요가 있음.
- **추가 학습**: 네트워크 계층과 프로토콜에 대한 추가 학습을 통해 더 깊은 이해를 얻을 수 있음.

## Comments



### Comment 25637

- Author: neo
- Created: 2024-05-27T17:33:17+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40482799) 
- 네트워크 문제 발생 시 어디서 문제가 생겼는지 알기 어려운 이유에 대한 질문. 네트워크 경로가 비결정론적이라는 설명이 설득력이 없다고 느끼는 의견.
- TLSv1.2와 TLSv1.3에 대한 상세하고 인터랙티브한 예제를 추천하는 의견. 링크 제공.
- "ELI(a mediocre engineer)" 스타일의 설명이 유익하다는 의견. 더 많은 예제를 찾고 싶어 함.
- SHA256 서명 검증 코드 예제를 찾고 있는 사람의 요청. 이론은 알지만 구현에 어려움을 겪고 있음.
- 샌프란시스코에서 HTTP 요청 작성으로 연봉 $300K를 받는다는 부분이 기사에서 가장 좋았다는 의견.
- 클라이언트가 서버의 공개 키로 프리마스터 시크릿을 암호화해 보내는 것은 오래된 정보라는 의견.
- SSL 인증서가 개인 키를 포함한다는 설명에 대한 의문. "Mediocre Engineer"라는 제목에 맞는 설명이라는 의견.
- 연봉 $300K를 $50K 낮춰서 일하고 싶다는 농담. TLS <1.3 설명이 잘못되었다는 지적.
- 기사 내용이 오래되었고, 현재 웹 요청의 30%가 HTTP3와 CORS를 사용한다는 의견. 출판 날짜가 없다는 지적.
- HTTPS 설명이 AI 요약처럼 보인다는 의견. 용어 설명이 부족하고, 독자가 공개 키 암호화에 대해 알고 있다고 가정함. OSI 계층 설명이 불완전하다는 지적.
