320x100
320x100
1. 인증서(Certificate)
개요
- 웹 서버의 신원을 증명하는 전자 문서
- X.509 표준 기반
- HTTPS(TLS)에서 서버 인증 및 공개키 전달에 사용
- CA(Certificate Authority)가 발급 및 전자서명 수행
- CA: 인증서를 발급해 주는 공인 인증 기관
인증서 구성
| 항목 | 설명 |
|---|---|
| Domain | 인증 대상 도메인 |
| Public Key | 공개키 |
| Issuer | 발급 기관(CA) |
| Validity | 유효기간 |
| Serial Number | 인증서 식별 번호 |
| Signature | CA 전자서명 |
역할
- 서버 신원 증명
- 공개키 전달
- TLS Handshake의 신뢰 기반 제공
2. HTTPS 인증 흐름
전체 구조
Browser
│
│ HTTPS 요청
▼
Web Server
│
│ Certificate
▼
Browser
│
├─ CA 서명 검증
├─ 도메인 확인
├─ 유효기간 확인
└─ Session Key 생성(ECDHE)인증서 발급
- 서버에서 Public Key / Private Key 생성
- CSR 생성 후 CA에 제출
- CA가 도메인 소유권 확인
- CA가 공개키와 도메인 정보에 전자서명
- 인증서 발급
TLS Handshake
1. Client Hello
브라우저 → 서버
- TLS Version
- Cipher Suite 목록
- Client Random
2. Server Hello
서버 → 브라우저
- TLS Version 선택
- Cipher Suite 선택
- Server Random
- Certificate 전달
3. 인증서 검증
브라우저 검증 항목
- Domain 일치 여부
- CA 신뢰 여부
- 전자서명 검증
- 유효기간
- 폐기 여부(OCSP/CRL)
4. Session Key 생성
현재 대부분 TLS는 ECDHE 사용
- Browser와 Server가 각각 임시 키 생성
- 공개키만 교환
- 동일한 Session Key 계산
- Session Key 자체는 네트워크로 전송되지 않음
5. 데이터 암호화
Session Key를 이용하여 대칭키 암호화 수행
사용 알고리즘
- AES-GCM
- ChaCha20-Poly1305
무엇이 암호화되는가?
| 항목 | 암호화 |
|---|---|
| HTML | ✅ |
| CSS | ✅ |
| JavaScript | ✅ |
| JSON | ✅ |
| Cookie | ✅ |
| Authorization Header | ✅ |
| POST Body | ✅ |
| Image | ✅ |
| Video | ✅ |
암호화되지 않는 정보
- IP Address
- TCP/IP Header
- TCP Port
- 기본 SNI(TLS 1.3)
3. Q&A
인증서를 설치하지 않아도 HTTPS가 가능한 이유
- 운영체제와 브라우저에 Root CA 인증서가 기본 포함됨
- 서버는 인증서 체인(Server → Intermediate → Root)을 전달
- 브라우저가 Root CA까지 검증하여 신뢰 여부 판단
- 따라서 웹사이트별 인증서를 직접 설치할 필요 없음
PC에 Root CA를 설치하면 어떻게 인식하는가?
- 브라우저가 운영체제 또는 자체 인증서 저장소 조회
- Root CA와 인증서 체인을 비교
- 일치하면 신뢰된 인증서로 판단
- 기업 내부망에서는 자체 Root CA를 배포하여 내부 서비스 인증
인증서 위조 및 만료 확인 방법
- Not Before / Not After 확인
- CA 전자서명 검증
- Domain(CN/SAN) 확인
- OCSP 또는 CRL로 폐기 여부 확인
핵심 요약
- 서버가 공개키/비밀키 생성
- CA에서 인증서 발급
- 브라우저가 인증서 검증
- ECDHE로 Session Key 생성
- 이후 모든 HTTP 데이터는 AES/ChaCha20으로 암호화
인증서는 서버를 신뢰하기 위한 수단이며, 실제 데이터 암호화는 Session Key를 사용하는 대칭키 암호화가 담당함.
300x250
728x90
'개발 > Development' 카테고리의 다른 글
| 개발자가 글을 잘 쓴다고 판단할 수 있는 기준 (0) | 2026.07.10 |
|---|---|
| 플랫폼 엔지니어링의 모든 것 (0) | 2026.07.10 |
| 코드 리뷰를 없에는 방법 (0) | 2026.04.11 |
| 스펙 기반 개발 (Spec Driven Development) (0) | 2026.04.11 |
| 변화하는 시스템 속에서 디자인 하기 - 더 나은 디자인 의사결정을 위한 제품 생애주기 관점 (0) | 2026.02.26 |