TLS & SSL
인터넷에서 데이터의 보안 전송을 위한 프로토콜
두 프로토콜은 데이터의 암호화, 무결성 보호, 인증 등을 제공
- SSL(Secure Sockets Layer)은 초기의 프로토콜이고,
TLS(Transport Layer Security)는 SSL을 개선한 후속 프로토콜임
| 구분 | SSL | TLS |
|---|
| 프로토콜 개발자 | Netscape에 의해 개발 | IETF에 의해 표준화 |
| 보안 수준 | TLS보다 낮음 | SSL에 비해 보안 수준이 향상됨 |
| 핸드쉐이크 과정 | SSL은 취약점이 존재, 다양한 공격에 노출 | TLS는 SSL을 개선하여 더 안전한 핸드쉐이크 과정 |
| 암호화 알고리즘 | SSL 2.0, 3.0은 몇 가지 암호화 알고리즘만 지원 | TLS는 더 많은 강력한 암호화 알고리즘을 지원 |
| 최신 버전 | SSL 3.0 (이미 보안 취약점 발견됨) | TLS 1.3 (가장 최신, 성능 및 보안 개선됨) |
1. SSL (Secure Sockets Layer)
: 웹에서 보안 통신을 위해 Netscape에 의해 개발된 프로토콜
[c.f]
SSL 1.0은 공식적으로 공개되지 않았으며, SSL 2.0이 널리 사용됨
그 이후 SSL 3.0이 나오면서 인터넷 보안에 큰 영향을 미침
2. TLS (Transport Layer Security)
: TLS는 SSL의 후속 프로토콜로,
SSL 3.0을 기반으로 IETF(Internet Engineering Task Force)에서 개선하고 표준화한 것
-
TLS는 더 강력한 암호화, 개선된 보안 기능, 효율적인 성능을 제공함
TLS 1.0은 사실상 SSL 3.0의 거의 그대로였지만, 그 이후에 많은 보안 취약점을 수정하고 기능을 개선한 버전들이 출시됨
-
현재 TLS 1.2와 TLS 1.3이 가장 널리 사용되며
3. TLS/SSL +Handshake 과정
Handshake는 클라이언트와 서버가 서로 암호화된 안전한 연결을 설정하는 과정
이 과정에서 클라이언트와 서버는 서로를 인증하고, 암호화에 사용할 키를 교환하며, 보안 연결을 수립함
TLS Handshake 과정

https://www.researchgate.net/figure/The-TLS-handshake-protocol-messages-sequence_fig2_321580115
TLS 핸드쉐이크는 클라이언트와 서버가 보안 연결을 설정하는 과정이며, 이 과정에서 세션 키, 인증서, Pre-master secret등이 사용됨
[+] 주요 개념
- Pre-master secret:
TLS 핸드셰이크 과정에서 클라이언트와 서버가 함께 만들어내는 비밀 값
이 값은 세션 키(session key)를 만들기 위한 "재료" 역할
실제 통신 암호화에는 직접 쓰이지 않고, 최종적으로 Master Secret을 생성하는데 사용됨
Pre-Master Secret → Master Secret → 세션 키 순서로 발전
- Session key:
클라이언트와 서버가 한 세션(연결) 동안만 사용하는 대칭키
TLS 핸드셰이크에서 파생되어 생성되며, 실제 데이터(HTTP 요청/응답)는 이 키로 암호화됨
- 인증서(Certificate): 서버가 클라이언트에게 전달하는 디지털 서명된 공개 키로, 서버의 신뢰성을 보장함
[과정]
- Client Hello:
- 클라이언트는 서버에 ClientHello 메시지를 전송
이 메시지에는 지원하는 TLS 버전, 암호화 알고리즘 목록, 랜덤값 등이 포함됨
- 클라이언트는 세션 ID를 제시하여 서버가 이전 세션을 재사용할 수 있는지 확인
- Server Hello:
- 서버는 ServerHello 메시지를 보내어 응답
이 메시지에는 사용할 TLS 버전, 암호화 알고리즘, 세션 ID, 랜덤값 등이 포함됨
- 서버는 클라이언트가 제시한 알고리즘 중 하나를 선택함
- 서버 인증 (Server Authentication):
- 서버는 디지털 인증서를 클라이언트에 전달하여 자신을 인증
이 인증서에는 서버의 공개 키가 포함되어 있음
- 클라이언트는 인증서를 검증하여 서버의 신뢰성을 확인
인증서는 CA(Certificate Authority)가 발행
- 키 교환:
- 클라이언트는 서버의 공개 키를 사용하여 Pre-master secret을 암호화하여 서버로 전송
- 서버는 자신의 비공개 키로 이 값을 복호화하여 Pre-master secret을 얻음
- 세션 키 생성:
- 클라이언트와 서버는 Pre-master secret과 앞서 교환된 랜덤값들을 기반으로 세션 키를 생성함
이 세션 키는 이후의 암호화된 통신에서 사용됨
- 클라이언트 Finished:
- 클라이언트는 Finished 메시지를 보내어, 설정된 세션 키를 사용하여 메시지를 암호화한 후 서버에 전송
이 메시지는 핸드쉐이크가 성공적으로 완료되었음을 알림
- 서버 Finished:
- 서버는 Finished 메시지를 보내어, 세션 키로 암호화된 응답 메시지를 전달함
이 메시지가 클라이언트에게 전달되면 Handshake가 완료
[+] 서버 인증서 발급
1. 서버에서 키/CSR 생성
2. CSR을 CA에 제출
3. 도메인 소유권 검증
4. CA가 인증서 발급
5. 서버에 인증서/중간 체인 설치