我正在使用 ioRedis 节点包将我的 Node js 应用程序连接到受 TLS 保护的 Redis 服务器。我使用的Redis版本是Redis 6.0。我的服务器使用证书运行良好,但从节点应用程序连接时出现错误。
Redis({
host: "localhost",
port: 6379,
tls: {
key: fs.readFileSync('./redis.key'),
cert: fs.readFileSync('./redis.crt'),
maxVersion: 'TLSv1.3',
minVersion: 'TLSv1.3',
ca: [fs.readFileSync('./redis.pem')]
}
})
nodejs应用程序端的错误是
This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:
Error: read ECONNRESET
at TCP.onStreamRead (internal/stream_base_commons.js:205:27)
尝试从 Nodejs 应用程序连接时服务器出错
17:29:44.295 # Error accepting a client connection: error:1408F10B:SSL routines:ssl3_get_record:wrong version number
目标只是建立一个具有 TLS 安全性的 Redis 连接。
我也在做同样的事情,我尝试这种方法(
node-redis
v2.8.0):
const redis = require('redis');
const fs = require('fs');
const client = redis.createClient({
host: '<hostname>',
port: <port>,
tls: {}
});
不要传递证书密钥,所有内容都尝试将 tls 作为空对象传递。 此方法的指南如下。 https://docs.upstash.com/docs/howto/connectwithtls
我认为你需要指定需要读取文件的编码
const redis = require('ioredis');
const fs = require('fs');
const client = redis.createClient({
host: 'hostName',
port: 'port',
tls: {
key: fs.readFileSync('pathToFile', 'ascii') /* this is usually the encoding */
cert: fs.readFileSync('pathToFile', 'ascii')
ca: fs.readFileSync('pathToFile', 'ascii') /* this is usually the encoding */
}
})
在此处查找更多信息
@Sohaib 的答案有点过时了。
从 v4.7.0(2024 年 7 月)开始,具体操作方法如下:
const redis = require('redis');
const fs = require('fs');
const client = redis.createClient({
socket: {
host: '<hostname>',
port: <port>
},
tls: true
});
另请参阅:https://redis.io/docs/latest/develop/connect/clients/nodejs/