SSL / TLS
- SSL (Secure Sockets Layer) — 구버전, 현재 사용 안 함
- TLS (Transport Layer Security) — SSL의 후속, 현재 표준
- 일반적으로 "SSL"이라고 부르지만 실제로는 TLS 사용
TLS 핸드셰이크 흐름
Client Server
│── ClientHello ────────────▶│ (지원 TLS 버전, 암호화 방식 목록)
│◀── ServerHello ────────────│ (선택된 버전, 암호화 방식)
│◀── Certificate ────────────│ (서버 인증서)
│◀── ServerHelloDone ────────│
│── ClientKeyExchange ──────▶│ (세션 키 교환)
│── ChangeCipherSpec ────────▶│
│── Finished ───────────────▶│
│◀── ChangeCipherSpec ────────│
│◀── Finished ────────────────│
│═══════ 암호화 통신 시작 ══════│
인증서 종류
| 종류 |
설명 |
용도 |
| DV (Domain Validation) |
도메인 소유 확인 |
일반 서비스 |
| OV (Organization Validation) |
도메인 + 조직 확인 |
기업 서비스 |
| EV (Extended Validation) |
엄격한 조직 검증 |
금융, 공공기관 |
| 와일드카드 |
*.example.com 서브도메인 모두 커버 |
다수의 서브도메인 |
| Let's Encrypt |
무료 DV 인증서, 90일 유효 |
개인/소규모 서비스 |
TLS 버전
| 버전 |
상태 |
| SSL 3.0 |
폐기 (POODLE 취약점) |
| TLS 1.0 / 1.1 |
폐기 권고 |
| TLS 1.2 |
현재 널리 사용 |
| TLS 1.3 |
최신 표준, 핸드셰이크 1-RTT로 단축 |
OpenSSL 명령어
# 자체 서명 인증서 생성 (개발용)
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
# 인증서 정보 확인
openssl x509 -in cert.pem -text -noout
# 원격 서버 인증서 확인
openssl s_client -connect example.com:443
# 인증서 만료일 확인
openssl x509 -in cert.pem -noout -enddate
# CSR (인증서 서명 요청) 생성
openssl req -new -newkey rsa:2048 -nodes -keyout key.pem -out request.csr
메모