В настоящее время я использую модуль mysql
со следующим кодом для подключения к моему серверу:
var connection = mysql.createConnection({
host : 'db1.domain.tld',
user : 'username',
password : 'xxxxxx',
ssl : true
});
И это работает без каких-либо проблем, но из документации неясно, что это даже справедливо. Там они пишут:
Параметры SSL
Параметр ssl в параметрах подключения принимает строку или объект. При задании строки используется один из предопределенных профилей SSL.
Таким образом, базовое значение этого описания ssl: true
недействительно. Итак, мой вопрос: если это допустимый вариант и почему?
Изучение исходного кода поведения
var connection = mysql.createConnection({
host : 'db1.domain.tld',
user : 'username',
password : 'xxxxxx',
ssl : true
});
Будет равным:
var connection = mysql.createConnection({
host : 'db1.domain.tld',
user : 'username',
password : 'xxxxxx',
ssl : {
rejectUnauthorized: false
}
});
Причина этого заключается в том, что эта часть кода в ConnectionConfig.js
:
if (this.ssl) {
// Default rejectUnauthorized to true
this.ssl.rejectUnauthorized = this.ssl.rejectUnauthorized !== false;
}
Поскольку this.ssl
содержит логическое значение в данном случае, this.ssl.rejectUnauthorized =...
ничего не делает, и this.ssl.rejectUnauthorized
будет undefined
после этого if.
Поскольку undefined
является ложным значением, он будет вести себя так же, как если бы rejectUnauthorized
был установлен в false
. Поэтому он использовал бы ssl
но не отклонил бы недействительный сертификат.
Начиная с этого параметра ssl
в boolean недействителен или, по крайней мере, приведет к неожиданному поведению.