SSL / TSL 프로토콜
2025. 10. 16. 22:16

SSLTLS는 모두 인터넷에서 데이터를 암호화해서 안전하게 전송하기 위한 보안 프로토콜
쉽게 말하면, 웹사이트와 사용자의 통신을  도청이나 위조 없이 안전하게 지켜주는 기술

🧩 1. SSL (Secure Sockets Layer)

  • 초기 버전의 보안 프로토콜
  • 1990년대 중반 Netscape에서 개발
  • 주 목적: 클라이언트(브라우저)와 서버(웹사이트) 사이의 데이터 암호화
  • 하지만 보안 취약점이 발견되면서 현재는 더 이상 사용되지 않음

📌 버전

버전 상태
SSL 1.0 내부 테스트, 공개 안 됨
SSL 2.0 1995년 출시 → 취약점으로 폐기
SSL 3.0 1996년 출시 → POODLE 공격으로 폐기

 

🔐 2. TLS (Transport Layer Security)

  • SSL의 업그레이드 버전이에요.
  • 1999년 IETF(인터넷 표준화 기구)가 SSL을 개선해 만든 표준이다.
  • 현재 HTTPS에서 사용하는 암호화는 모두 TLS 기반

📌 TLS 버전

버전 특징
TLS 1.0 SSL 3.0 기반, 보안 강화
TLS 1.1 약한 암호 알고리즘 제거
TLS 1.2 가장 널리 사용 (현재 대부분 이 버전)
TLS 1.3 최신 버전 (2018년), 속도 향상 + 강력한 보안

 

⚙️ 3. 작동 원리 (핸드셰이크 과정)

  1. 클라이언트 → 서버: “보안 연결하고 싶어요” (지원하는 암호 알고리즘 목록 전송)
  2. 서버 → 클라이언트: “좋아요, 이 암호 방식으로 합시다” (서버 인증서와 공개키 전송)
  3. 클라이언트: 서버 인증서 확인 → 세션 키 생성 → 암호화해서 서버에 전송
  4. 서버: 세션 키 복호화
  5. 이후 통신은 대칭키 암호화로 빠르고 안전하게 진행

🌐 4. HTTPS와의 관계

  • HTTP + TLS = HTTPS
    → 웹사이트 주소가 https://로 시작하면 TLS로 보호되고 있다는 뜻이다.
    → 🔒 자물쇠 아이콘이 브라우저 주소창에 표시되죠.

✅ 5. 요약 비교

구분 SSL TLS
시대 1990년대 1999년 이후
개발자 Netscape IETF
보안 수준 낮음 높음
사용 여부 사용 안 함 현재 표준
HTTPS 사용

🧩 1️⃣ TLS 1.2 vs TLS 1.3 차이점

구분 TLS 1.2 TLS 1.3
출시년도 2008 2018
핸드셰이크 단계 6단계 이상 (복잡, 느림) 3단계로 단축 (빠름)
암호 알고리즘 RSA, DH, ECDHE 등 다양 ECDHE만 허용 (보안 강화)
암호 스위트 구성 키 교환 + 인증 + 암호화 + MAC 조합 단순화 (AEAD 암호화만 지원)
세션 재사용 Session ID / Ticket 사용 0-RTT 핸드셰이크로 즉시 복원 가능
보안성 중간자 공격(MITM) 방어 미흡 강력한 암호화와 Forward Secrecy 필수
속도 상대적으로 느림 약 30~40% 빠름

📌 핵심 요약

  • TLS 1.3은 보안 강화 + 속도 향상을 동시에 달성한 버전이다.
  • 낡은 암호 알고리즘(예: RSA, SHA-1)은 모두 제거됨.
  • 핸드셰이크가 간소화되어 HTTPS 연결이 훨씬 빠름.
  • Forward Secrecy(키가 유출되어도 과거 통신은 복호화 불가능)가 기본 적용됨.

⚙️ 2️⃣ Spring / 웹 서버에서 TLS 적용 방법

🧱 (1) SSL 인증서 준비

먼저, TLS는 SSL 인증서를 기반으로 동작한다.
인증서를 얻는 방법은 두 가지이다.

  1. 공인 인증서 (CA 발급)
    • 예: Let’s Encrypt (무료), Digicert, Sectigo 등
    • 실제 서비스용으로 권장 ✅
  2. 자체 서명 인증서 (Self-signed)
    • 테스트용으로 가능 (브라우저에서 “안전하지 않음” 경고 뜸)

🧩 (2) Spring Boot 설정 예시

# application.yml
server:
  port: 8443
  ssl:
    enabled: true
    key-store: classpath:keystore/mykeystore.p12
    key-store-password: yourpassword
    key-store-type: PKCS12

📘 참고:

  • mykeystore.p12는 인증서 파일.
  • .p12 또는 .jks 형식 가능.

🔑 (3) Keystore 생성 명령어 (JDK 기본 keytool 이용)

keytool -genkeypair \
  -alias myalias \
  -keyalg RSA \
  -keysize 2048 \
  -storetype PKCS12 \
  -keystore mykeystore.p12 \
  -validity 3650


→ Spring Boot에서 해당 경로를 지정하면 HTTPS가 활성화돼요.

🌐 (4) Nginx / Apache 연동 (Spring을 리버스 프록시로 운영할 때)

✅ Nginx 예시

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:8080;
    }
}

 

🔒 (5) 적용 후 HTTPS 테스트

브라우저에서
👉 https://localhost:8443
또는
👉 https://yourdomain.com
으로 접속하면 🔒 자물쇠 아이콘이 나타나면 성공!

✅ 정리 요약

항목 설명
최신 표준 TLS 1.3
주요 개선점 속도 향상, 보안 강화, 단순화
Spring 적용 application.yml에서 SSL 설정
테스트용 인증서 keytool 명령으로 생성 가능
운영환경 Let’s Encrypt 등 공인 CA 인증서 권장
웹서버 연동 Nginx/Apache로 리버스 프록시 구성 가능
NellKiM
NellKiM