【问题标题】:How do I connect to IBM Cloud Databases for Redis using Node.js?如何使用 Node.js 连接到 IBM Cloud Databases for Redis?
【发布时间】:2019-07-22 23:01:03
【问题描述】:

我无法从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 Databases 版本?

【问题讨论】:

    标签: ibm-cloud-infrastructure


    【解决方案1】:

    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证书。通过使用此属性提供自签名证书,将不会出现上述错误。

    【讨论】:

      猜你喜欢
      • 2019-05-13
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 2018-12-03
      • 2021-09-25
      • 1970-01-01
      • 2019-12-10
      • 2020-06-03
      相关资源
      最近更新 更多