I’m following this tutorial.
In my case I am operating in a Docker environment, and I have a secured site (i.e. https://localhost). which requires secured ssl communication.
I adjusted the web, and celery containers for secure connection.
But I don’t know how to configure the Redis container for secure connection with ssl
Note that when I run without ssl connection in the web and celery containers, the connection is fine.
How do I configure and run redis with ssl?
Thanks
EDIT:
I followed this tutorial to set redis with ssl and this tutorial to set redis with ssl via stunnel in Docker container.
I successfully tested the connection from my localhost to the redis docker container, by invoking redis-cli
from localhost (via stunnel) to the redis docker container, using the following call from the localhost:
redis-cli -h 127.0.0.1 -p 6381
127.0.0.1:6381> auth foobared
OK
127.0.0.1:6381>
Related files on the redis server Docker side:
docker-compose file (my webapp includes multiple services, but to for simplification I removed all services except for the redis container):
version: '3'
services:
redis:
build:
context: ./redis
dockerfile: Dockerfile
restart: always
command: sh -c "stunnel /stunnel_take2.conf && /usr/local/bin/redis-server /etc/redis/redis.conf"
expose:
- '6379'
ports:
- "6379:6379"
volumes:
- /home/avner/avner/certs:/etc/certs
- /home/avner/avner/redis/conf:/etc/redis
redis container Dockerfile
FROM redis:5-alpine
RUN apk add --no-cache
stunnel~=5.56
python3~=3.8
COPY stunnel-redis-server.conf /
WORKDIR /
ENV PYTHONUNBUFFERED=1
redis server redis conf file – redis/conf/redis.conf
...
requirepass foobared
...
redis server stunnel conf file – redis/stunnel-redis-server.conf
cert = /etc/certs/private.pem
pid = /var/run/stunnel.pid
[redis]
accept = 172.19.0.2:6380
connect = 127.0.0.1:6379
Related files on the client side (localhost):
redis client stunnel conf file – /etc/stunnel/redis-client.conf
cert = /etc/cert/private.pem
client = yes
pid = /var/run/stunnel.pid
[redis]
accept = 127.0.0.1:6381
connect = 172.19.0.2:6380
2
Answers
Redis doesn’t provide SSL by itself, you have to do it yourself. There’s an in-depth post about it which you can read and follow. Or, if you want to use a Dockerized solution, you can use ready images like this one or this one. When it comes to setting up Celery to work with Redis over SSL, just follow the documentation.
I’ve created an example repo, for how one might setup a docker container to use the new redis v6+ ssl:
docker-compose.yml
Dockerfile:
entrypoint.sh
gen-redi-certs.sh