“Redis TLS(Transport Layer Security)”는 Redis 서버와 클라이언트 간의 통신을 암호화(Encryption) 하는 기능이에요.
기본 Redis는 속도 중심이라 평문(plain text) 통신이 기본인데, TLS 설정을 하면 보안이 강화됩니다.
아래에 원리 → 설정법 → 예시 → 주의점 순서로 정리해드릴게요 👇
🔐 1️⃣ TLS란?
TLS(Transport Layer Security) 는 통신 구간에서 데이터를 암호화해서
누군가가 패킷을 훔쳐봐도 내용을 알 수 없게 만드는 프로토콜이에요.
즉, Redis 클라이언트와 서버가 주고받는 데이터를 안전하게 보호합니다.
Redis 6.0부터 공식적으로 TLS 지원이 추가되었습니다.
이전 버전에서는 stunnel이나 spiped 같은 외부 터널링 툴을 써야 했습니다.
🧩 2️⃣ TLS를 사용하면 달라지는 점
구분 일반 Redis TLS 사용 시
포트 6379 6380 (보통 TLS용 별도 포트)
연결 방식 평문 TCP TLS 암호화 연결
인증 비밀번호 (옵션) 인증서 기반 인증
보안 수준 낮음 (내부망 한정 사용) 높음 (공용망에서도 안전)
⚙️ 3️⃣ 설정 방법 (redis.conf 기준)
Redis 서버가 TLS를 사용하려면 인증서 파일 3개가 필요합니다:
ca.crt → 인증서 발급 기관 (CA)
server.crt → 서버 인증서
server.key → 서버 개인 키
예시 설정 👇
port 0 # 기본 6379 포트 비활성화
tls-port 6380 # TLS용 포트 활성화
tls-cert-file /etc/redis/ssl/server.crt
tls-key-file /etc/redis/ssl/server.key
tls-ca-cert-file /etc/redis/ssl/ca.crt
tls-auth-clients yes # 클라이언트 인증 필수 (옵션)
이렇게 설정하고 Redis 서버를 재시작하면,
이제는 TLS 포트(6380)로만 접속 가능합니다.
💻 4️⃣ 클라이언트에서 접속하는 법
🔹 redis-cli
redis-cli --tls \
--cert /etc/redis/ssl/client.crt \
--key /etc/redis/ssl/client.key \
--cacert /etc/redis/ssl/ca.crt \
-h your-redis-host -p 6380
🔹 Python (redis-py)
import redis
r = redis.Redis(
host="your-redis-host",
port=6380,
ssl=True,
ssl_certfile="/etc/redis/ssl/client.crt",
ssl_keyfile="/etc/redis/ssl/client.key",
ssl_ca_certs="/etc/redis/ssl/ca.crt"
)
r.set("foo", "bar")
print(r.get("foo"))
🔹 Node.js (ioredis)
const Redis = require("ioredis");
const redis = new Redis({
host: "your-redis-host",
port: 6380,
tls: {
ca: fs.readFileSync("/etc/redis/ssl/ca.crt"),
cert: fs.readFileSync("/etc/redis/ssl/client.crt"),
key: fs.readFileSync("/etc/redis/ssl/client.key")
}
});
🔒 5️⃣ 인증서 만들기 (테스트용)
테스트 환경에서는 openssl을 이용해 직접 인증서를 만들 수 있습니다 👇
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/CN=MyRedisCA"
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr -subj "/CN=redis-server"
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr -subj "/CN=redis-client"
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -sha256
⚠️ 6️⃣ 주의할 점
성능 오버헤드: TLS 암호화 때문에 CPU 부하가 약간 늘어납니다.
→ 내부망에서는 tls-port만 보안 필요 구간에서만 사용하도록 조정 가능.
포트 구분
port 6379: 일반 통신
tls-port 6380: 암호화 통신
→ 둘 다 동시에 사용할 수도 있습니다.
클러스터 / 레플리카 환경에서는
모든 노드 간 통신에도 TLS 설정이 동일해야 합니다.
tls-replication yes
tls-cluster yes
ACL(Access Control List)과 함께 쓰면 더 강력한 보안 정책 설정 가능.
📘 7️⃣ 실제 서비스에서의 활용 패턴
환경 TLS 사용 권장도 이유
내부망 (VPC, 사설망) △ (선택적) 네트워크가 신뢰 가능한 경우, 성능 우선
클라우드 외부 접근 (Public Endpoint) ✅ 필수 트래픽 도청 및 위변조 방지
Redis 클러스터 (멀티 노드) ✅ 권장 노드 간 통신도 암호화 필요
인증 민감 서비스 (결제/회원 정보 등) ✅ 필수 데이터 유출 방지
🔍 요약
항목 내용
Redis TLS 버전 Redis 6.0 이상
주요 설정 tls-port, tls-cert-file, tls-key-file, tls-ca-cert-file
클라이언트 접속 명령 redis-cli --tls
인증서 필요 여부 서버/클라이언트 인증 모두 가능
장점 데이터 암호화, MITM 공격 방지
단점 약간의 성능 저하