SSL TLS

기술노트
Admin (토론 | 기여)님의 2025년 9월 6일 (토) 05:05 판 (Gemini 벌크 업로더로 자동 업로드)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

🔒 SSL & TLS

SSL(Secure Sockets Layer)TLS(Transport Layer Security)는 인터넷과 같은 네트워크를 통해 통신하는 두 애플리케이션 간에 암호화된 보안 채널을 제공하는 암호화 프로토콜입니다. TLS는 SSL의 후속 버전으로, 현재는 SSL이 아닌 TLS가 표준으로 사용되지만, 관용적으로 SSL/TLS라고 함께 부르는 경우가 많습니다.

우리가 흔히 보는 `https://` 로 시작하는 웹사이트는 모두 SSL/TLS를 통해 통신이 암호화되고 있음을 의미합니다.


🤔 SSL/TLS는 왜 필요한가?

기본적인 HTTP 통신은 암호화되지 않은 평문으로 이루어지기 때문에, 공격자가 중간에서 통신 내용을 엿보거나(도청), 변조하는 중간자 공격(Man-in-the-middle attack)에 매우 취약합니다.

SSL/TLS는 통신 내용을 암호화하여, 제3자가 데이터를 가로채더라도 그 내용을 알 수 없게 하여 데이터의 '기밀성'과 '무결성'을 보장합니다.


⚙️ SSL/TLS 핸드셰이크 (Handshake)

클라이언트와 서버는 암호화된 통신을 시작하기 전에, '핸드셰이크'라는 과정을 통해 서로를 확인하고, 사용할 암호화 방식과 키를 협상합니다. 이 과정은 비대칭키 암호화 방식을 사용합니다.

1. **ClientHello**: 클라이언트가 서버에 접속하며, 자신이 사용할 수 있는 암호화 방식 목록과 랜덤 데이터를 보냅니다. 2. **ServerHello**: 서버는 클라이언트의 암호화 방식 중 하나를 선택하고, 자신의 SSL 인증서와 랜덤 데이터를 클라이언트에게 보냅니다. 3. **인증서 검증**: 클라이언트는 서버로부터 받은 인증서가 신뢰할 수 있는 인증 기관(CA)에 의해 발급된 것인지 확인합니다. 4. **키 교환**: 클라이언트는 앞으로 실제 데이터를 암호화할 대칭키(세션 키)를 생성하여, 서버의 공개키로 암호화한 뒤 서버에 보냅니다. 5. **암호화 통신 시작**: 서버는 자신의 개인키로 암호화된 대칭키를 복호화하여 얻고, 이제 클라이언트와 서버는 이 대칭키를 사용하여 안전하게 암호화된 통신을 시작합니다.


💡 개발자 핵심 Point

  • SSL/TLS는 HTTPS 통신의 핵심입니다. 웹 서비스를 배포하고 운영하려면, 반드시 신뢰할 수 있는 인증 기관(CA)으로부터 SSL/TLS 인증서를 발급받아 웹 서버에 설치해야 합니다.
  • Let's Encrypt와 같은 기관을 통해 무료로 SSL/TLS 인증서를 발급받을 수 있습니다.
  • SSL/TLS는 웹(HTTPS)뿐만 아니라, 이메일(SMTPS, IMAPS), VPN 등 다양한 네트워크 통신의 보안을 위해 사용됩니다.
  • 암호화/복호화 과정 때문에 약간의 성능 저하가 발생할 수 있지만, 현대의 하드웨어 성능과 보안의 중요성을 고려하면 무시할 수 있는 수준입니다.