SSL/TLS란?
SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 네트워크 통신을 보호하는 암호화 프로토콜입니다. TLS는 SSL의 후속 표준이지만 일상적으로 SSL이라는 말이 둘을 함께 가리키기도 합니다. 두 프로토콜은 브라우저와 서버 사이의 데이터를 암호화해 HTTPS를 가능하게 합니다.
SSL과 TLS의 간단한 역사
| 버전 | 연도 | 상태 |
|---|---|---|
| SSL 1.0 | 1994 | 출시되지 않음(결함) |
| SSL 2.0 | 1995 | 폐기됨(안전하지 않음) |
| SSL 3.0 | 1996 | 폐기됨(POODLE 취약점) |
| TLS 1.0 | 1999 | 폐기됨 |
| TLS 1.1 | 2006 | 폐기됨 |
| TLS 1.2 | 2008 | 현재 표준 |
| TLS 1.3 | 2018 | 최신 권장 버전 |
현대 시스템은 TLS 1.2 또는 TLS 1.3만 사용해야 합니다.
TLS의 작동 방식
TLS 핸드셰이크
1. Client Hello: 브라우저가 지원하는 TLS 버전과 암호 스위트를 보냅니다.
2. Server Hello: 서버가 TLS 버전과 암호 스위트를 선택합니다.
3. 인증서: 서버가 SSL 인증서를 보냅니다.
4. 키 교환: 암호 스위트에 따라 보안 키를 교환합니다.
5. 완료: 암호화된 세션을 수립합니다.
Client Server
|-- Client Hello -------------->|
|<-- Server Hello --------------|
|<-- Certificate ---------------|
|<-- Key Exchange --------------|
|-- Key Exchange -------------->|
|-- Finished ------------------>|
|<-- Finished ------------------|
|<======= Encrypted Session ===>|
TLS 1.3은 왕복을 한 번으로 줄여 성능을 높입니다.
SSL/TLS 인증서
인증서에 포함되는 내용
- Subject: 인증서가 적용되는 도메인 이름
- Issuer: 인증서를 발급한 인증기관(CA)
- Validity Period: 시작일과 만료일
- Public Key: 암호화 연결 수립에 사용하는 공개 키
- Signature: CA의 암호화 서명
인증서 유형
도메인 검증(DV): 도메인 소유권만 증명- 수분 안에 발급
- Let's Encrypt는 무료이며 유료 발급도 있음
- 자물쇠가 표시되지만 조직 정보는 표시하지 않음
- 사업체 검증 필요
- 인증서 세부 정보에 조직 이름 표시
- 더 높은 신뢰도와 중간 수준의 비용
- 철저한 신원 확인
- 과거의 녹색 주소 표시줄은 브라우저에서 제거됨
- 가장 높은 비용과 신뢰도
인증서 적용 범위
단일 도메인: 하나의 도메인(example.com)에 적용 와일드카드: 모든 하위 도메인(*.example.com)에 적용 다중 도메인(SAN): 여러 특정 도메인에 적용SSL/TLS 구현
Let's Encrypt 무료 인증서
# Using Certbot
sudo certbot --nginx -d example.com -d www.example.com
# Auto-renewal
sudo certbot renew --dry-run
클라우드 제공업체 인증서
대부분의 클라우드 플랫폼은 무료 자동 갱신 인증서를 제공합니다.
- Cloudflare: 프록시 도메인에 자동 적용
- AWS: Certificate Manager(ACM)
- Google Cloud: 관리형 SSL 인증서
인증서 확인
브라우저는 다음 순서로 인증서를 확인합니다.
1. 신뢰할 수 있는 루트 CA까지 인증서 체인을 확인
2. 인증서가 만료되지 않았는지 확인
3. 도메인이 일치하는지 확인
4. 폐기 상태(CRL/OCSP) 확인
SSL/TLS 모범 사례
서버 구성
TLS 1.2 이상 사용: SSL 3.0, TLS 1.0, TLS 1.1을 비활성화합니다.ssl_protocols TLSv1.2 TLSv1.3;
강력한 암호 스위트: 현대적이고 안전한 암호를 우선합니다.
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
HSTS: HTTPS를 강제합니다(HSTS 용어 항목 참고).
인증서 관리
- 갱신 자동화: 인증서는 만료됩니다(Let's Encrypt는 90일).
- 만료 모니터링: 만료 전 알림을 설정합니다.
- CAA 레코드 사용: 발급할 수 있는 CA를 제한합니다.
SSL/TLS 확인
DomScan 사용:curl "https://domscan.net/v1/health?domain=example.com"
# Returns SSL validity, issuer, expiration
OpenSSL 사용:
openssl s_client -connect example.com:443 -servername example.com
온라인 도구: SSL Labs(ssllabs.com/ssltest)는 종합 분석을 제공합니다.
일반적인 SSL 문제
혼합 콘텐츠: HTTPS 페이지가 HTTP 리소스를 불러오는 문제(브라우저가 차단할 수 있음) 인증서 불일치: 인증서가 도메인과 일치하지 않음 만료된 인증서: 인증서 유효 기간이 끝남 불완전한 체인: 중간 인증서가 누락됨SSL/TLS는 더 이상 선택 사항이 아닙니다. 모든 웹사이트가 보안과 SEO를 위해 HTTPS를 사용해야 합니다.