3

我似乎无法在 Node.js 上使用 TLS 连接到 Heroku Redis。

这些文档并没有太大帮助:https ://devcenter.heroku.com/articles/securing-heroku-redis

有没有人有一个工作的例子?我应该使用 REDIS_URL 还是 REDIS_TLS_URL?

我正在使用 node_redis v3

4

3 回答 3

6

Error: self signed certificate in certificate chain我发现 Heroku 的 Redis 6 附加组件在节点上使用 ioredis 连接到 REDIS_URL 时产生错误。您可以通过传入rejectUnauthorized设置为的 TLS 选项来避免此错误false

允许使用自签名证书rejectUnauthorizedfalse如果担心 MITM 攻击,这将是一个问题。有关更多背景信息,请参阅TLS 选项

这适用于我使用ioredis带有 redis:// 和 redis:// URL 的最新软件包...

  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);
于 2021-01-04T13:42:19.730 回答
1

这是我的方法。单独传递 URL 和 TLS 选项更容易。

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);

如果您有使用爱好版本运行的测试环境,则 TLS 是 URL 设置在 REDIS_TLS_URL 中,而生产通常使用高级版运行,环境是 REDIS_URL。因此,为了与两者兼容,我首先查找 REDIS_TLS_URL,然后再查找 REDIS_URL 以同时支持 test 和 prod env。

于 2021-08-18T13:41:28.070 回答
0

不幸的是,我不知道为什么您无法连接到这个 Redis Add-on。

如果您想在另一个附加组件上进行测试,我已经开发了一个 Redis 附加组件,它位于 Heroku 上的“alpha”短语(免费)中。如果您无法连接到它,我将能够为您提供一些支持。

如果您有兴趣,请私下给我您的 Heroku 电子邮件,我会向您发送邀请 :)

于 2020-12-17T15:10:36.207 回答