티스토리 뷰
Background
용어 정리
- 인증 (Authenticate) : 해당 사용자가 누구인지 신원을 확인
- 인가 (Authorization) : 해당 사용자가 어떤 권한을 가지는 확인하고 부여
- 대칭키 (Symmetric Key) : 암호, 복호에 같은 키를 사용
- 비대칭키 (Asymmetric Key) : 암호, 복호에 다른 키를 사용
- Root CA : 신뢰가능한 인증서 발급 기관 (GeoTrust)
인증서는 왜 쓰는건가?
우리가 인터넷망을 통해 패킷을 주고받는 과정에서 다음과 같은 문제가 발생할 수 있음
- L2 스위칭, L3 라우팅 중에 패킷을 훔쳐본다면?
- Dst 주소가 정상적인 목적지가 아니라면?
- 중간에 패킷이 변조된다면?
기밀성(Confidentiality), 무결성(Integrity)을 보장하기 위해 통신 프로토콜에 보안 계층을 추가
SSL/TLS
L4 layer에서는 암호화나 보안 기능을 제공하지 않음.
L4위에 SSL (Secure Sockets Layer)를 통해서 TCP 세션을 암호화 및 인증을 진행함
(L3, UDP 는 IPSec을 적용)
TLS는 이전의 암호화 프로토콜 SSL에서 발전한 버전으로, 실제로 현재는 TLS가 표준으로 사용되고 있음. 다만 개념적으로 용어를 SSL과 섞어서 사용
TLS handshake

- TCP 3-way handshake 진행
- ClientHello: 클라이언트가 암호 스위트, TLS 버전, 랜덤 값 전달
- ServerHello: 서버가 암호 스위트 선택, 인증서(공개키 포함) 전달
- 클라이언트는 인증서 체인을 Root CA까지 검증 → 서버 공개키 유효성 확인
- (TLS 1.2) RSA 또는 ECDHE로 pre-master secret 교환
- 양측은 pre-master secret + 랜덤 값으로 session key 생성
- session key로 이후 패킷 암호화
인증서 생성 및 등록
보통 서버(웹서버, LB, ..)에 SSL 인증서를 등록하고 이를 활용함
letsencrypt 와 같은 오픈소스도구를 사용하면 해당 과정을 통해서 인증서를 발급 받음
- key pair 생성
- private key / public key pair 생성
- private key는 서버 내부에만 저장, public key는 인증서
- CSR (Certificate Signing Request) 생성
- public key + 도메인 정보(CN=example.com 등)를 포함한 요청 생성
- 이 CSR을 CA(Certificate Authority)에 제출
- CA의 서명
- CA는 신청자의 도메인 소유권을 검증(DNS TXT 레코드, 이메일, HTTP 파일 ..)
- 검증이 끝나면 CA는 서버의 public key에 자신의 private key로 서명한 인증서를 발급
- 서버에 인증서 등록
- 서버는 CA가 서명한 인증서(=서버 인증서)와 private key를 함께 보관
- 필요하다면 중간 인증서(Intermediate CA) 체인도 설치
https://cocopam.tistory.com/43
certbot wildcard 인증서 갱신
ACME dns-01Let’s Encrypt는 도메인 소유권을 검증하기 위해 여러 인증 방식을 지원그중 dns-01 challenge는 다음 절차를 따름 인증 서버가 무작위 토큰을 발급함Certbot은 토큰과 계정 키를 조합해 CERTBOT_VAL
cocopam.tistory.com
인증서 계층
인터넷에서 쓰이는 인증서는 단일 구조가 아니라 계층적으로 신뢰를 이어가는 구조를 가짐. 이를 Chain of Trust라고 부름.

- Root CA (최상위 인증 기관)
- 신뢰의 최상단에 위치
- 전 세계적으로 공신력 있는 기관들이 운영, 브라우저/운영체제에 기본 내장됨
- 보안을 위해 Root CA는 직접 서버 인증서를 발급하지 않고 대부분 Intermediate CA를 통해 위임
- Intermediate CA (중간 인증 기관)
- Root CA로부터 서명받은 인증서로 서버 인증서를 발급하는 역할
- 만약 보안 사고가 발생하더라도 Root CA를 보호하기 위한 중간 단계
- 실제 서버가 전송하는 인증서 체인에 포함되어, 클라이언트가 Root CA까지 신뢰를 이어갈 수 있게 함
- Server Certificate (서버 인증서)
- 실제 서비스 도메인(CN=example.com)에 발급되는 인증서
- 서버 public key + 도메인 정보 포함
- Intermediate CA의 private key로 서명됨
- TLS handshake 과정에서 클라이언트에게 제시되는 인증서가 바로 이 부분
검증 과정
클라이언트가 서버와 TLS 연결을 맺을 때는 다음 순서로 검증이 진행됨
- 서버가 자신의 서버 인증서와 함께 Intermediate CA 인증서를 전송
- 클라이언트는 서버 인증서를 확인하고 → ICA가 서명했는지 검증
- ICA 인증서를 확인하고 → Root CA가 서명했는지 검증
- Root CA가 로컬(브라우저/OS)에 내장된 신뢰 저장소에 존재하는지 확인
client 패킷 확인
https 요청을 보낼때, 어떤 과정이 일어나는지 확인
- TCP handshake

- hello 이후, 서버 인증서 전달


issuer의 정보를 보고 상위 인증서를 찾음

브라우저에서는 해당 인증서를 로컬에서 확인 (여기서는 바로 root)
- client는 Root까지 확인한 이후, 키 교환 방식 전달

이후 session key 생성 과정은 생략
'Infra' 카테고리의 다른 글
| k8s network (kube-proxy) (0) | 2026.01.03 |
|---|---|
| Cloudflare Tunnel을 활용한 k8s Ingress 대체 (0) | 2025.09.27 |
| Docker로 알아보는 Linux network 가상화 (0) | 2025.09.06 |
| [Network] SSL VPN (3) | 2025.09.03 |
| [Network] IPSec (0) | 2025.08.31 |
- Total
- Today
- Yesterday
- io blocking
- 프로젝트
- 싸지방
- 정보보호병
- codeanywhere
- FastAPI
- 백준
- Web
- 코딩
- letsencrypt
- react
- 구름ide
- C
- 분할 정복
- pintos
- 뿌요뿌요
- GPT2
- ttyd
- 사이버정보지식방
- 리눅스
- 뿌요뿌요 테트리스
- HNSW
- Deep Learning
- 시간 초과
- 토이프로젝트
- os
- pvm
- vector search
- Python
- 웹IDE
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |