通过 ssl 连接到 mysql 的最佳 Node.js mysql 模块是什么?

问题描述 投票:0回答:4

到目前为止,我已经使用 node-mysql 构建了我的应用程序。我刚刚使用 AWS RDS 服务设置了一个可安全访问的 mysql 数据库,并使用 mysql 命令行客户端成功测试了 SSL 连接。我有亚马逊的公钥 .pem 文件。 node-mysql 似乎没有用于 SSL 连接选项的 api。

到目前为止我发现的唯一一个是 Node-mysql-libmysqlclient 但我在尝试连接它时遇到了错误,绑定依赖项为空,所以我不确定是否应该信任它。使用哪个模块/api 的建议?或者,如果你知道我需要在 node-mysql 中修改什么,我愿意稍微修改一下,但看起来它使用较低级别的套接字来连接到 MySQL,所以我不确定获得添加了 SSL 部分。

mysql node.js ssl node-mysql
4个回答
11
投票
var mysql  = require('mysql');
var fs     = require('fs');

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'me',
  password : 'secret',
  database : 'my_db',
  ssl      : {
        ca   : fs.readFileSync('./ssl/server-ca.pem'), // should be enough for AWS
        key  : fs.readFileSync('./ssl/client-key.pem'), // required for google mysql cloud db
        cert : fs.readFileSync('./ssl/client-cert.pem'), // required for google mysql cloud db
  }
});

这应该可以解决问题。


1
投票

node-mysql 模块支持 ssl 连接,如下所示:https://github.com/felixge/node-mysql#ssl-options


0
投票

如果您使用的是node-mysql,请确保手动包含CA:

来自文档,在“SSL 选项”下:

连接选项中的 ssl 选项采用字符串或对象。当给定一个字符串时,它使用包含的预定义 SSL 配置文件之一。

如果您使用字符串选项指定证书颁发机构 (CA),例如“Amazon RDS”,它将解析为现已过时的 CA,因此连接器将抛出

"HANDSHAKE_SSL_ERROR"

对于 AWS 连接,明确指定包含 CA 证书的 .pem 文件的路径:

const fs = require('fs');

const connection = mysql.createConnection({
    // ...
    ssl: {
        ca: fs.readFileSync(__dirname + './ssl/us-west-1-bundle.pem')
    }
});

-4
投票

使用续集! 毫无疑问,MariaDB/MySQL 的最佳 ORM。 https://github.com/sequelize/sequelize

npm install sequelize
--- then ---
npm install mariadb
--- or ---
npm install mysql
© www.soinside.com 2019 - 2024. All rights reserved.