ABCD.ca
ABCD.ca

Reputation: 2495

What's the best Node.js mysql module for connecting to mysql over ssl?

I've built my app so far using node-mysql. I just set up a securely accessible mysql database using AWS RDS service and have tested an SSL connection successfully with the mysql command line client. I have Amazon's public key .pem file. node-mysql doesn't seem to have an api for the SSL connect option.

The only one I've found so far is Node-mysql-libmysqlclient but I got errors trying to connect with it, something about a bindings dependency being null so I'm not sure if I should trust it. Suggestions of which module/api to use? Alternatively, if you know what I need to modify in node-mysql I'd be willing to tinker a bit but it looks like it's using lower level Sockets to connect to MySQL so I'm not sure how hard it would be to get the SSL part added on.

Upvotes: 6

Views: 8915

Answers (4)

Lindauson
Lindauson

Reputation: 3441

If you are using node-mysql make sure to manually include the CA:

From the Documentation, Under "SSL Options":

The ssl option in the connection options takes a string or an object. When given a string, it uses one of the predefined SSL profiles included.

If you are using the string option to specify the Certificate Authority (CA), for example, "Amazon RDS" it will resolve to the, now outdated CA, so the connector will throw a, "HANDSHAKE_SSL_ERROR".

For AWS connections, explicitly specify the path to the .pem file containing your CA certificate:

const fs = require('fs');

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

Upvotes: 0

buycanna.io
buycanna.io

Reputation: 1204

Use Sequelize! Hands down best ORM around for MariaDB/MySQL. https://github.com/sequelize/sequelize

npm install sequelize
--- then ---
npm install mariadb
--- or ---
npm install mysql

Upvotes: -4

Nikita
Nikita

Reputation: 4686

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

that should do the trick.

Upvotes: 11

matteo
matteo

Reputation: 1725

The node-mysql module supports ssl connections as showed here: https://github.com/felixge/node-mysql#ssl-options.

Upvotes: 1

Related Questions