SSL
As part of the connection options, you can specify the ssl
object property or a string containing the SSL profile content (deprecated).
ssl?: string | SslOptions;
See full list of SslOptions, which are in the same format as tls.createSecureContext.
SSL Options​
To enable SSL without manually providing certificates and assuming they are already trusted by the host machine, you can specify an empty object, for example:
const connection = await mysql.createConnection({
host: 'localhost',
ssl: {},
});
You can also specify custom certificate(s) as an individual string or array of strings. Please note the arguments expect a string of the certificate, not a file name to the certificate:
import fs from 'node:fs';
const connection = await mysql.createConnection({
host: 'localhost',
ssl: {
ca: fs.readFileSync(__dirname + '/mysql-ca.crt'),
},
});
When a certificate is read from an environment variable, it's recommended to replace escaped \n
characters with proper new line characters, for example:
const connection = await mysql.createConnection({
host: 'localhost',
ssl: {
ca: process.env.DB_SSL_CA?.replace(/\\n/gm, '\n'),
},
});
SSL Certificate Bundle​
Alternatively, you can use a bundle with CA certificates. For example for Amazon RDS you could use:
import awsCaBundle from 'aws-ssl-profiles';
const connection = await mysql.createConnection({
host: 'db.id.ap-southeast-2.rds.amazonaws.com',
ssl: awsCaBundle,
});
For detailed instructions, please follow aws-ssl-profiles documentation.
SSL Profile (deprecated)​
There is also a deprecated option allowing to specify a string containing name of SSL profile:
const connection = await mysql.createConnection({
host: 'localhost',
ssl: 'Amazon RDS',
});
Following profiles are included in the package:
Amazon RDS
- in this case https://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem CA cert is used
Ignoring Unauthorized SSL Errors​
You can also connect to a MySQL server without providing an appropriate CA to trust. This is highly discouraged as being insecure.
const connection = await mysql.createConnection({
host: 'localhost',
ssl: {
// Beware, set `rejectUnauthorized` as `false` is strongly discouraged for security reasons:
rejectUnauthorized: false,
},
});