SSL/TLS 암호화란?
SSL(Secure Sockets Layer)과 TSL(Transport Layer Security)는 인터넷 통신에서 데이터를 암호화하여 주고받기 위한 보안 프로토콜이다.
과거에 사용 되던 SSL의 보안 취약점을 보완하여 발전시킨 표준이 TLS이다.
사용시기?
1. HTTP 서비스를 안전한 HTTPS로 전환할 때
- 웹 사이트와 사용자 간의 전체 통신 구간을 암호화해야 할 때 사용한다.
2. 개인정보 및 민감 데이터를 송수신 할 때
- 로그인, 회원가입, 신용카드 결제, 계좌 이체 등 보안이 필수적인 긴으을 수행할 때 사용한다.
3. 서버의 신원을 증명해야 할 때
접속하려는 사이트가 가짜 피싱 사이트가 아닌 검증된 진짜 서버인지 디지털 인증서를 통해 확인해야 할 때 사용한다.
4. 웹 외의 통신 프로토콜 보안 강화 시
- 이메일 전송(SMTPS), 파일 전송(FTPS) 등 인터넷을 통한 데이터 이동 전반에 적용된다.
SSL/TLS 작동 방식
SSL/TLS는 핸드셰이크 과정을 통해 보안 연결을 맺은 뒤 데이터를 암호화하여 전송한다.
효율성을 위해 비대칭키(공개키)와 대칭키 암호화를 혼합하여 사용한다.
[클라이언트 (브라우저)] [서버]
----------------- 1. Client Hello ----------------->
<---------------- 2. Server Hello ----------------- (인증서 전달)
----------------- 3. 키 교환 및 검증 -------------> (대칭키 생성)
<---------------- 4. 완료 (Handshake Finished) ----
================= 암호화 통신 시작 =================
1. Client Hello
- 클라이언트가 서버에 접속하여 지원 가능한 암호화 방식 목록과 임의의 난수를 전달한다.
2. Server Hello
- 서버는 암호화 방식을 선택하고 자신의 SSL/TLS 디지털 인증서를 클라이언트에게 전달한다.
3. 인증서 검증 및 대칭키 생성
- 클라이언트는 신뢰할 수 있는 기관(CA)에서 발급한 인증서인지 확인한다.
- 검증이 완료되면 클라이언트는 데이터를 빠르게 암호화할 대칭키(보안열쇠)를 만든 뒤 서버의 공개키로 암호화하여 서버로 보낸다.
4. HandShake 완료 및 암호화 통신
- 서버는 자신의 개인키로 이를 복호화하여 동일한 대칭키를 나눠 가진다.
- 이후 주고받는 모든 데이터는 이 대칭키를 사용해 빠르게 암호화/복호화하며 통신한다.
실제 적용 사례
1. 웹 브라우저의 HTTPS의 접속 (주소창의 자물쇠 아이콘)
- 우리가 [https://www.naver.com] 같은 주소에 접속 할 때 주소창에 나타나는 초록색/검정색 자물쇠 아이콘이 SSL/TSL가 적용된 대표적인 사례이다.

2. 온라인 쇼핑몰 및 간편 결제 서비스
- 토스, 카카오페이, PG사 결제 창에서 신용카드 번호나 CVC 번호를 입력하여 결제할 때 데이터가 SSL/TLS 터널을 통해 암호화되어 결제 서버로 전달된다.
3. 모바일 앱과 벡엔드 서버 간의 API 통신
- 스마트폰 앱(카카오톡, 금융 앱 등)이 서버와 데이터를 주고받을 때 중간 해킹을 방지하기 위해 SSL/TSL 기반의 보안 토신 채널을 사용한다.
실제 코드 예시
1. 백엔드 서버 설정 (Nginx 서버)
웹 서버 설정 파일에 SSL/TSL 인증서 파일(.crt, .key)의 위치를 지정하여 HTTPS에 지정한다.
server {
listen 443 ssl; # 443번 포트로 SSL/TLS 연결을 받음
server_name mydomain.com;
# 발급받은 SSL/TLS 인증서 파일 경로 연결
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
# 최신 보안 TLS 프로토콜 적용
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://localhost:8080; # 내부 백엔드 앱으로 전달
}
}
2. 프론트엔드 API 호출 및 쿠키 보안 설정 (Node.js / JS)
API 데이터 요청 (프론트엔드)
// HTTP 대신 보안이 적용된 HTTPS URL로 요청을 보냄
fetch('https://api.mydomain.com/v1/user/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id: 'user1', password: 'secretPassword123' })
});
로그인 쿠키 생성 (백엔드 Express)
res.cookie('token', userToken, {
httpOnly: true,
secure: true, # True로 설정 시 SSL/TLS(HTTPS) 연결에서만 쿠키를 전송함!
sameSite: 'strict'
});
'CS 지식' 카테고리의 다른 글
| [CS 지식] 실시간 통신을 하는 방법들 (0) | 2026.09.16 |
|---|---|
| [CS 지식] OSI 7계층이란? (0) | 2026.09.15 |
| [CS 지식] RDBMS와 NoSQL이란? (1) | 2026.09.09 |
| [CS 지식] Kafka란? (0) | 2026.09.07 |
| [CS 지식] Redis란? (0) | 2026.09.04 |