到目前为止,我已经使用 node-mysql 构建了我的应用程序。我刚刚使用 AWS RDS 服务设置了一个可安全访问的 mysql 数据库,并使用 mysql 命令行客户端成功测试了 SSL 连接。我有亚马逊的公钥 .pem 文件。 node-mysql 似乎没有用于 SSL 连接选项的 api。
到目前为止我发现的唯一一个是 Node-mysql-libmysqlclient 但我在尝试连接它时遇到了错误,绑定依赖项为空,所以我不确定是否应该信任它。使用哪个模块/api 的建议?或者,如果你知道我需要在 node-mysql 中修改什么,我愿意稍微修改一下,但看起来它使用较低级别的套接字来连接到 MySQL,所以我不确定获得添加了 SSL 部分。
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
}
});
这应该可以解决问题。
node-mysql 模块支持 ssl 连接,如下所示:https://github.com/felixge/node-mysql#ssl-options。
如果您使用的是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')
}
});
使用续集! 毫无疑问,MariaDB/MySQL 的最佳 ORM。 https://github.com/sequelize/sequelize
npm install sequelize
--- then ---
npm install mariadb
--- or ---
npm install mysql