heroku 错误代码:1408F10B:SSL例程:ssl3_get_record:错误的版本号

fcwjkofz  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(252)

在将我的Heroku Redis插件从v4升级到v6.2.3后,Heroku papertrail日志显示此错误:Error accepting a client connection: error:1408F10B:SSL routines:ssl3_get_record:wrong version number
我使用NodeJs和bull npm包(https://www.npmjs.com/package/bull)连接到Redis,我发现了与此错误相关的类似问题,沿着Heroku文档,基于此,我将bull redis选项设置为如下:

redis: {
    host: redisURL.hostname,
    port: Number(redisURL.port),
    password: redisURL.password,
    tls: {
      rejectUnauthorized: false,
    },
  },

注意tls参数,我在这里将其设置为Heroku的建议:https://devcenter.heroku.com/articles/heroku-redis#connecting-in-node-js
在卡住了一段时间之后,我尝试注解掉任何连接到Redis的客户端代码,删除插件,并重新配置插件。我希望在我这样做的时候在papertrail中看不到redis日志,但是我仍然看到同样的错误,即使没有连接到redis的代码正在运行...这让我相信可能是在实际的Redis插件示例上的一个设置。而不是我的代码有问题,但我很困惑。

更新内容:

我登录到redis:cli并做了一些调查。client list显示了2个客户端连接。1个是我在终端中运行的redis:cli的示例,另一个是带有标志的客户端,标志表示“该客户端是到此示例的副本节点连接”(请参见https://redis.io/commands/client-list)。有趣的是,papertrail中记录的错误显示了具有SSL错误fd=12的客户端连接的文件描述符,而client list中显示的2个客户端具有文件描述符fd=10fd=11。因此,一定有另一个具有fd=12的客户端连接,该连接未出现在client list命令中,从而导致了上面显示的错误。

qnakjoqk

qnakjoqk1#

遇到了同样的问题。除了rejectUnauthorized: false之外,添加requestCert: true,为我解决了这个问题。此外,一些客户端需要agent: false,(但我使用的Bull版本不识别该参数)

redis: {
    host: redisURL.hostname,
    port: Number(redisURL.port),
    password: redisURL.password,
    tls: {
      rejectUnauthorized: false,
      requestCert: true,
      // agent: false, (not all clients accept this)
    },
  },
ghg1uchk

ghg1uchk2#

Jasper Kennis' answer是正确的。添加tls: {rejectUnauthorized: false}为我解决了这个问题。不幸的是,Heroku只给你一个完整的REDIS_URL连接字符串,所以你需要自己解析password/host/port(你不能同时指定URL和tls设置)。下面是我的BullModule.forRoot()配置对象,如果它有帮助的话:

redis: {
    password: process.env.REDIS_URL.split('@')[0].split(':')[2],
    host: process.env.REDIS_URL.split('@')[1].split(':')[0],
    port: parseInt(process.env.REDIS_URL.split('@')[1].split(':')[1]),
    tls: { rejectUnauthorized: false },
  }

使用:@nestjs/bull:0.6.0,Heroku红皮书:6.2.3

相关问题