Redis TLS

Redis TLS (SSL/TLS 암호화)

Redis는 버전 6부터 SSL/TLS를 선택 기능으로 지원하며, 컴파일 타임에 활성화해야 합니다. TLS를 쓰면 클라이언트-서버 통신(및 복제·클러스터·Sentinel 통신)을 암호화하고 서버·클라이언트 인증서 검증으로 보안을 강화할 수 있습니다.

출처: https://redis.io/docs/latest/operate/oss_and_stack/management/security/encryption/

시작하기

빌드

TLS 지원으로 빌드하려면 OpenSSL 개발 라이브러리(Debian/Ubuntu에선 libssl-dev)가 필요합니다. 다음 명령으로 빌드합니다.

make BUILD_TLS=yes

테스트

TLS로 Redis 테스트 스위트를 돌리려면 TCL용 TLS 지원(tcl-tls 패키지)이 필요합니다.

  1. ./utils/gen-test-certs.sh를 실행해 루트 CA와 서버 인증서를 생성합니다.
  2. ./runtest --tls 또는 ./runtest-cluster --tls로 Redis·Redis Cluster 테스트를 TLS 모드로 실행합니다.

수동 실행

TLS 모드로 Redis 서버를 수동 실행하려면(gen-test-certs.sh를 실행해 샘플 인증서·키가 준비됐다고 가정):

./src/redis-server --tls-port 6379 --port 0 \
    --tls-cert-file ./tests/tls/redis.crt \
    --tls-key-file ./tests/tls/redis.key \
    --tls-ca-cert-file ./tests/tls/ca.crt

redis-cli로 이 서버에 연결:

./src/redis-cli --tls \
    --cert ./tests/tls/redis.crt \
    --key ./tests/tls/redis.key \
    --cacert ./tests/tls/ca.crt

인증서 구성

TLS를 지원하려면 Redis가 X.509 인증서와 개인 키로 구성돼야 합니다. 또 인증서 검증 시 신뢰 루트로 쓸 CA 인증서 번들 파일이나 경로를 지정해야 합니다. DH 기반 암호를 지원하려면 DH params 파일도 구성할 수 있습니다. 예:

tls-cert-file /path/to/redis.crt
tls-key-file /path/to/redis.key
tls-ca-cert-file /path/to/ca.crt
tls-dh-params-file /path/to/redis.dh

TLS 리스닝 포트

tls-port 구성 지시어는 지정한 포트에서 SSL/TLS 연결을 수락하게 합니다. 이는 port의 TCP 연결에 추가로 동작하므로, TLS·비TLS 연결로 서로 다른 포트에서 Redis에 접근할 수 있습니다.

port 0을 지정하면 비TLS 포트를 완전히 끌 수 있습니다. 기본 Redis 포트에서 TLS만 켜려면:

port 0
tls-port 6379

클라이언트 인증서 인증

tls-auth-clients 지시어로 클라이언트 인증서 인증을 활성화할 수 있습니다.(default는 yes). 활성화하면 클라이언트도 유효한 인증서를 제시해야 합니다.

tls-auth-clients yes
tls-cert-file /etc/ssl/redis.crt
tls-key-file /etc/ssl/redis.key
tls-ca-cert-file /etc/ssl/ca.crt

복제 (Replication)

복제에서 TLS를 쓰려면 마스터·복제본 모두 TLS로 구성하고, 복제본은 마스터 인증서를 검증하기 위한 CA와 마스터 호스트 이름 확인 설정이 필요합니다. 예:

# 마스터
tls-replication yes

# 복제본
tls-replication yes
replicaof master-host 6379
tls-ca-cert-file /etc/ssl/ca.crt

클러스터

Redis Cluster 노드 간 통신도 TLS로 보호할 수 있습니다. tls-cluster yes를 설정하면 클러스터 버스(노드 간) 통신이 TLS로 암호화됩니다. 각 노드가 CA·인증서로 구성되어야 하며, 클러스터 버스 포트도 TLS를 따라야 합니다.

tls-cluster yes

Sentinel

Sentinel이 Redis 서버와 통신할 때도 TLS를 쓸 수 있습니다. Sentinel 구성에서 TLS 관련 지시어를 켜고, 감시 중인 마스터/복제본이 TLS로 구성되어야 합니다.

tls-replication yes
sentinel monitor mymaster master-host 6379 2

추가 구성

TLS 관련 추가 지시어로 프리퍼드 암호 스위트(tls-ciphers, tls-ciphersuites), 프로토콜 버전(tls-protocols) 등이 있습니다.

성능 고려사항

TLS는 암호화·복호화 오버헤드 때문에 특정 워크로드에서 처리량이 떨어질 수 있습니다. 하드웨어 가속(예: AES-NI)이 가능한 CPU와 적절한 TLS 세션 재사용으로 성능 저하를 줄일 수 있습니다.

제한 사항

  • TLS 지원은 컴파일 타임에 활성화해야 해서 배포 바이너리에 따라 TLS가 없을 수 있습니다.
  • 버전에 따라 일부 지시어·동작(예: 특정 프로토콜 기본값)이 다를 수 있습니다. 사용 버전 문서를 확인하세요.

더 알아보기 (Learn more)