【问题标题】:How do I connect to a MySQL database server running on PlanetScale with SSL from node.js on localhost?如何从本地主机上的 node.js 使用 SSL 连接到服务器?
【发布时间】:2022-10-16 04:43:09
【问题描述】:

我正在尝试连接到 PlanetScale 上的 MySQL 服务器,但无法连接,因为它需要 SSL。

这是他们的文档,但不清楚它说了什么。 https://planetscale.com/docs/concepts/secure-connections

这是连接网址:DATABASE_URL='mysql://co30rXXXXXXX:pscale_pw_XXXXXXX@hoqx01444p30.us-east-4.psdb.cloud/restaurant?ssl={"rejectUnauthorized":true}'

这是我在运行yarn run migration-run 时从终端看到的内容

yarn run v1.22.18 $ npx prisma migrate dev 环境变量 从 .env 加载 Prisma 模式从 prisma/schema.prisma 加载 数据源“db”:MySQL 数据库“餐厅”位于 “hoqx0XXXXX.us-east-4.psdb.cloud:3306”

错误:迁移引擎错误:未知错误:代码:服务器不可用 不允许不安全的连接,客户端必须使用 SSL/TLS

error 命令失败,退出代码为 1。 info 访问 https://yarnpkg.com/en/docs/cli/run 获取相关文档 命令。

有没有人尝试从本地主机上的 Node.js 连接到 PlanetScale DB?我尝试了 Stackoverflow 的其他一些建议,但似乎不起作用。

【问题讨论】:

  • PS:ssl={"rejectUnauthorized":false} 我也从其他答案中尝试了此选项,但不起作用。
  • @RickN 谢谢你的建议!抱歉回复晚了,但我已经设法做到了! :) SSL 证书路径解决了这个问题。所以我添加了?ssl={"rejectUnauthorized":false}&sslcert=/etc/ssl/certs/ca-certificates.crt

标签: mysql node.js ssl ssl-certificate


【解决方案1】:

?ssl={"rejectUnauthorized":false}&sslcert=/etc/ssl/certs/ca-certificates.crt

在连接链接末尾添加这些参数,问题已得到修复。 :)

【讨论】:

    【解决方案2】:

    WINDOWS 上的 SSL 问题

    如果您在 Windows 机器上工作并使用 .env 文件作为连接字符串,那么这对我来说是在本地运行的。

    您可以通过“overview”>“connect”从 PlanetScale 控制台获取连接字符串

    这看起来像:

    DATABASE_URL='mysql://xxxxxx:*****@aws-eu-west-1.connect.psdb.cloud/dbName?ssl={"rejectUnauthorized":true}'
    

    当简单地使用它时,您很可能会收到以下错误消息(如问题所述):

    Code: UNAVAILABLE server does not allow insecure connections, client must use SSL/TLS
    

    因此,您需要提供本地证书,可以从以下受信任的位置下载:

    接下来,您需要将此文件保存到磁盘上可以在连接字符串中引用的逻辑位置,例如c:/temp/cacert.pem

    保存后,您可以将以下内容附加到您的连接字符串:

    &sslcert=C:\temp\cacert.pem
    

    重新启动您的服务器,您应该一切就绪! ?

    NodeJs 中的等效 ssl 证书更新如下所示:

    const connection = mysql.createConnection({
        host: 'hostNameHere',
        user: 'userNameHere',
        password: 'passwordHere',
        database: 'dbHere',
        ssl: {
            ca: fs.readFileSync('C:\temp\cacert.pem')
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多