Некоторое время я использую Node.js LTS с базами данных RDS MySQL. Недавно я создал бессерверный кластер RDS Aurora MySQL 5.6. В отличие от других моих баз данных RDS, я не могу заставить Node.js подключиться к новому бессерверному кластеру с SSL с помощью адаптеров Node mysql или mysql2.
Из одного экземпляра Ubuntu с одним приложением Node.js:
Я могу успешно подключить приложение Node к любой из моих старых баз данных RDS (MySQL 5.6.40) с помощью SSL:
// works with other RDS databases:
const fs = require('fs');
const mysql = require('mysql2');
const config = require('../config');
var connectionArgs = {
host: config.old_rds_host,
database: config.old_rds_database,
user: config.old_rds_user,
password: config.old_rds_password,
port: config.rds.port,
ssl: {
ca: fs.readFileSync(__dirname + '/../rds-combined-ca-bundle.pem')
}
}
var connection = mysql.createConnection(connectionArgs);
С того же компьютера я могу без проблем подключиться с помощью SSL к новому кластеру RDS с помощью клиента MySQL:
// Works with new RDS serverless cluster:
mysql -u rds_serverless_user -p -h new-rds-serverless-cluster.us-west-2.rds.amazonaws.com -P 3306 --ssl --ssl-ca=./rds-combined-ca-bundle.pem
Я могу успешно подключить приложение Node к новому бессерверному кластеру без SSL:
// Works with new RDS serverless cluster:
const fs = require('fs');
const mysql = require('mysql2');
const config = require('../config');
var connectionArgs = {
host: config.rds_host,
database: config.rds_serverless_database,
user: config.rds_serverless_user,
password: config.rds_serverless_password,
port: config.rds.port
}
var connection = mysql.createConnection(connectionArgs);
Но когда я пытаюсь подключиться к новому бессерверному кластеру с сертификатом SSL, я получаю сообщение об ошибке, что сервер не поддерживает безопасное соединение:
// Fails with new RDS serverless cluster:
const fs = require('fs');
const mysql = require('mysql2');
const config = require('../config');
var connectionArgs = {
host: config.rds_host,
database: config.rds_serverless_database,
user: config.rds_serverless_user,
password: config.rds_serverless_password,
port: config.rds.port,
ssl: {
ca: fs.readFileSync(__dirname + '/../rds-combined-ca-bundle.pem')
}
}
var connection = mysql.createConnection(connectionArgs);
Debug: internal, implementation, error
Error: Server does not support secure connnection
at ClientHandshake.handshakeInit (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/commands/client_handshake.js:120:17)
at ClientHandshake.Command.execute (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/commands/command.js:40:20)
at Connection.handlePacket (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/connection.js:513:28)
at PacketParser.onPacket (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/connection.js:81:16)
at PacketParser.executeStart (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/packet_parser.js:76:14)
at Socket.<anonymous> (/home/deploy_user/my-node-rds-app/node_modules/mysql2/lib/connection.js:89:29)
at emitOne (events.js:116:13)
at Socket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at Socket.Readable.push (_stream_readable.js:208:10)
at TCP.onread (net.js:601:20)
Так что по-другому? Единственное очевидное различие между старыми базами данных RDS и новым бессерверным кластером состоит в том, что старые экземпляры - это MySQL 5.6.40, а новый кластер RDS - это Aurora MySQL 5.6.10a. Кроме того, старые имена хостов экземпляров RDS разрешаются в один частный IP-адрес, в то время как новое имя хоста кластера разрешается в несколько частных IP-адресов.
Я получаю те же результаты, используя адаптер mysql. Я также пробовал профиль SSL «Amazon RDS» в адаптере mysql и получил те же результаты.
Я не могу использовать аутентификацию базы данных IAM, потому что этой службе потребуется обрабатывать более 20 новых подключений в секунду.
Любой совет будет очень признателен.
status
от клиента cli? (или, может быть,SHOW STATUS LIKE 'Ssl_cipher';
запрос)? Просто пытаясь дважды проверить, что клиент командной строки действительно надежно подключен, а не тихо понижал вас до открытого текстового соединения, поскольку это единственный доступный вариант - person Andrey Sidorov   schedule 10.10.2018debug: true
и опубликовать несколько соответствующих строк из журналов? (флаги сервера esp) - person Andrey Sidorov   schedule 10.10.2018--ssl-mode=REQUIRED
, я вернусьERROR 2026 (HY000): SSL connection error: Server doesn't support SSL
. - person   schedule 24.10.2018