我无法从Node.js应用程序连接到IBM Cloud Databases for Redis实例。我已经提供了一个实例并创建了服务凭据,这为我提供了一个连接字符串。
将此连接字符串与Node.js client library for Redis一起使用会引发以下连接错误:
Error: Redis connection to <id>.databases.appdomain.cloud:port failed - read ECONNRESET
at TCP.onread (net.js:657:25) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read'如果我在客户端构造函数中设置了tls属性,我会得到以下错误:
Error: Redis connection to <id>.databases.appdomain.cloud:port failed failed - self signed certificate in certificate chain
at TLSSocket.onConnectSecure (_tls_wrap.js:1055:34)
at TLSSocket.emit (events.js:182:13)
at TLSSocket._finishInit (_tls_wrap.js:635:8) code: 'SELF_SIGNED_CERT_IN_CHAIN'这是用于创建客户端库实例的代码。
const redis = require("redis"),
const url = 'rediss://<URL_FROM_SERVICE_CREDS/'
const client = redis.createClient(url);这适用于Redis的本地实例,但不适用于IBM Cloud数据库版本?
发布于 2019-07-22 23:01:03
IBM Cloud Databases for Redis uses TLS connections用于保护对所有数据库实例的访问。TLS连接使用self-signed certificate进行身份验证。由于证书是自签名的,因此如果不提供来自服务的公共证书,则Node.js运行时无法信任该证书。
服务凭据中的connection.rediss.certificate.certificate_base64值提供了一个包含证书文件的Base64编码字符串。然后,该字符串可以与Node.js客户端库一起使用,如下所示...
const ca = Buffer.from(cert_base64, 'base64').toString('utf-8')
const tls = { ca };
const client = redis.createClient(url, { tls });tls属性传递给Node.js中的tls.connect方法,该方法用于设置TLS连接。此方法支持ca参数以扩展系统中预安装的受信任CA证书。通过使用此属性提供自签名证书,将不会看到上面的错误。
https://stackoverflow.com/questions/57148766
复制相似问题