如何从localhost上的node.js连接到使用SSL的服务器?

pu82cl6c  于 2022-11-14  发布在  Node.js
关注(0)|答案(2)|浏览(135)

我尝试连接到PlanetScale上的MySQL服务器,但无法连接,因为它需要SSL。
这是他们的文档,但不清楚它说了什么。https://planetscale.com/docs/concepts/secure-connections
以下是连接URL:DATABASE_URL='mysql://co30rXXXXXXX:pscale_pw_XXXXXXX@hoqx01444p30.us-east-4.psdb.cloud/restaurant?ssl={"rejectUnauthorized":true}'
这是我运行yarn run migration-run时在终端上看到的结果
Yarn运行v1.22.18 $ npx prisma migrate dev从.env中加载的环境变量从prisma/schema中加载的Prisma模式.prisma数据源“db”:MySQL数据库“餐厅”位于“hoqx0XXXXX.us-east-4.psdb.cloud:3306”
错误:迁移引擎错误:未知错误:代码:UNAVAILABLE服务器不允许不安全的连接,客户端必须使用SSL/TLS
error命令失败,退出代码为1。info有关此命令的文档,请访问https://yarnpkg.com/en/docs/cli/run
是否有人尝试过从localhost上的Node.js连接到PlanetScale DB?我尝试过Stackoverflow的一些其他建议,但似乎不起作用。

k75qkfdt

k75qkfdt1#

?ssl={"rejectUnauthorized":false}&sslcert=/etc/ssl/certs/ca-certificates.crt
在连接链接的末尾添加这些参数后,该问题已得到修复。:)

mnemlml8

mnemlml82#

Windows上的SSL问题

如果你在Windows机器上工作,并使用.env文件作为连接字符串,下面是我在本地运行的方法(windows没有默认的/etc/ssl/certs/引用as answered here)。
您可以通过“概述”〉“连接”从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
保存后,您可以将then后面的内容追加到连接字符串中:

&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')
    }
});

相关问题