Cómo conectar Heroku Redis TLS Node?
Parece que no puedo conectarme a Heroku Redis usando TLS en Node.
Estos docs no son de mucha ayuda: https://devcenter.heroku.com/articles/securing-heroku-redis
¿Alguien tiene un ejemplo de trabajo? ¿Debería estar usando REDIS_URL o REDIS_TLS_URL?
Estoy usando node_redis v3
Pregunta hecha hace 3 años, 4 meses, 29 días - Por techtactician
8 Respuestas:
-
Encontré el complemento Redis 6 de Heroku generó un
Error: self signed certificate in certificate chain
error cuando se conecta a REDIS_URL sin parámetros con ioredis en Nodo. Puede evitar este error pasando por opciones TLS conrejectUnauthorized
establecidofalse
.El
rejectUnauthorized
defalse
permite certificados auto-firmados, lo que sería un problema si se preocupa por los ataques MITM. See Opciones de TLS para más antecedentes.Esto está funcionando para mí con lo último
ioredis
paquete con rediss:// y redis:// URL's...const REDIS_URL = process.env.REDIS_URL; const redis_uri = url.parse(REDIS_URL); const redisOptions = REDIS_URL.includes("rediss://") ? { port: Number(redis_uri.port), host: redis_uri.hostname, password: redis_uri.auth.split(":")[1], db: 0, tls: { rejectUnauthorized: false, }, } : REDIS_URL; const redis = new Redis(redisOptions);
Respondida el Dec 17, 2020 a las 13:18 - por pixelprodigy
Votos positivos: 0 | Votos negativos: 0 -
Aquí está mi enfoque. Es más fácil pasar las opciones URL y TLS por separado.
const redisUrl = process.env.REDIS_TLS_URL ? process.env.REDIS_TLS_URL : process.env.REDIS_URL; const redisDefaults = { tls: { // Heroku uses self-signed certificate, which will cause error in connection, unless check is disabled rejectUnauthorized: false, }, }; const defaultClient = redis.createClient(redisUrl, redisDefaults);
Si tiene env de prueba funcionando con versión de hobby, el TLS es URL se establece en REDIS_TLS_URL, mientras que la producción normalmente funciona con prima y el env es REDIS_URL. Así que, para ser compatible con los dos, busco por primera vez REDIS_TLS_URL y después de ese REDIS_URL para apoyar tanto la prueba como el prod env.
Respondida el Dec 17, 2020 a las 13:25 - por debugdynamo05ee
Votos positivos: 0 | Votos negativos: 0 -
Para los devs utilizando
node-redis
Necesitarás poner TLS a la verdad al inicializar a tu cliente.redis.createClient({ url: REDIS_URL, socket: { tls: true, rejectUnauthorized: false, }, }
Respondida el Dec 17, 2020 a las 13:35 - por scriptsphinx
Votos positivos: 0 | Votos negativos: 0 -
No sé por qué no puedes conectarte a este Redis Add-on desafortunadamente.
En el caso de que quieras probar otro Add-On, he desarrollado un Redis Add-On que está en la frase "alpha" (gratis) en Heroku. Seré capaz de proporcionarte algo de apoyo si no puedes conectarte a él.
Si estás interesado, dame tu correo electrónico de Heroku en privado y te enviaré una invitación:)
Respondida el Dec 17, 2020 a las 13:41 - por codesculptor
Votos positivos: 0 | Votos negativos: 0 -
Para la gente que usa Bull, esta implementación funcionó para mí. Gracias @Tom McLellan.
const Queue = require('bull'); const redisUrlParse = require('redis-url-parse'); const REDIS_URL = process.env.REDIS_URL || 'redis://127.0.0.1:6379'; const redisUrlParsed = redisUrlParse(REDIS_URL); const { host, port, password } = redisUrlParsed; const bullOptions = REDIS_URL.includes('rediss://') ? { redis: { port: Number(port), host, password, tls: { rejectUnauthorized: false, }, }, } : REDIS_URL; const workQueue = new Queue('work', bullOptions);
Respondida el Dec 17, 2020 a las 13:47 - por csscraftsman
Votos positivos: 0 | Votos negativos: 0 -
Esto funcionó para mí usando
node-redis
v3.0.0const opts = config.REDIS_URL.includes('rediss://') ? { url: config.REDIS_URL, tls: { rejectUnauthorized: false } } : config.REDIS_URL; const client = redis.createClient(opts);
Uso
tls
nosocket
. Gracias esto.Respondida el Dec 17, 2020 a las 13:52 - por compilerchieftain
Votos positivos: 0 | Votos negativos: 0 -
Para conectarte a Heroku Redis usando TLS en Node, debes usar la variable de entorno
REDIS_TLS_URL
en lugar deREDIS_URL
. Aquí te dejo un ejemplo de cómo hacerlo connode_redis
v3:javascript const redis = require("redis"); // La URL se encuentra en la variable de entorno REDIS_TLS_URL const redisClient = redis.createClient(process.env.REDIS_TLS_URL, { tls: { // Indica que se debe usar TLS rejectUnauthorized: false, // Cambia a true si quieres que se rechacen certificados no verificados }, }); redisClient.on("connect", () => { console.log("Conectado a Redis usando TLS"); }); redisClient.on("error", (error) => { console.error("Error de conexión a Redis:", error); }); // Ejemplo de uso redisClient.set("mykey", "Hello Redis", (err, reply) => { console.log(reply); });
Asegúrate de tener la librería
redis
instalada en tu proyecto (npm install redis
) y de incluir el código anterior en tu aplicación.Al establecer
rejectUnauthorized
enfalse
,Respondida el Dec 18, 2020 a las 13:18 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Uso de
REDIS_TLS_URL
Para conectarse a Heroku Redis usando TLS en Node con
node-redis
v3, siga estos pasos:1. Obtenga la URL de TLS:
Vaya al panel de Heroku y navegue hasta su aplicación Redis. Haga clic en la pestaña "Config" y copie el valor de la variable de configuración
REDIS_TLS_URL
.2. Cree el cliente Redis:
const redis = require("redis"); const redisTLS = redis.createClient({ url: process.env.REDIS_TLS_URL, });
3. Conéctese al servidor Redis:
redisTLS.connect((err) => { if (err) { // Manejar el error de conexión } else { // Conectado exitosamente } });
Uso de
REDIS_URL
Nota: Este método está en desuso y se recomienda utilizar
REDIS_TLS_URL
en su lugar.1. Obtenga la URL de Redis:
Vaya al panel de Heroku y navegue hasta su aplicación Redis. Haga clic en la pestaña "Config" y copie el valor de la variable de configuración
REDIS_URL
.2. Cree el cliente Redis:
const redis = require("redis"); const redisTLS = redis.createClient(process.env.REDIS_URL, { tls: { servername: process.env.REDIS_HOST, // El nombre de host del servidor Redis }, });
3. Conéctese al servidor Redis:
redisTLS.connect((err) => { if (err) { // Manejar el error de conexión } else { // Conectado exitosamente } });
Comprobaciones adicionales:
Asegúrese de que la variable de entorno
REDIS_HOST
esté configurada con el nombre de host del servidor Redis. Compruebe que tenga habilitada la configuración "Conexión segura" para su Redis en Heroku.Nota: Al utilizar
REDIS_TLS_URL
, la bibliotecanode-redis
manejará automáticamente la configuración de TLS utilizando los certificados proporcionados por Heroku.Respondida el Dec 18, 2020 a las 13:25 - por Gemini
Votos positivos: 0 | Votos negativos: 0