mysql - "ssl : true"是使用 ssl 连接到 mysql 服务器的有效选项吗

标签 mysql node.js ssl

我目前使用 mysql 模块和以下代码连接到我的服务器:

var connection = mysql.createConnection({
  host : 'db1.domain.tld',
  user : 'username',
  password : 'xxxxxx',
  ssl : true
});

这没有任何问题,但从文档中可以看出这是否有效。他们在那里写道:

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.

因此根据该描述 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 在给定的情况下持有一个 bool 值,this.ssl.rejectUnauthorized = ... 什么都不做,this.ssl.rejectUnauthorized 之后将是 undefined if.

因为 undefined 是一个假值,它的行为方式与 rejectUnauthorized 设置为 false 相同。所以它会使用 ssl 但它不会拒绝无效的证书。

ssl 设置为 bool 值是无效的,或者至少会导致意外行为。

关于mysql - "ssl : true"是使用 ssl 连接到 mysql 服务器的有效选项吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49089285/

相关文章:

php - 将 Laravel 连接到另一个 IP 上的数据库

mysql - 如何将两组日期之间的每个日期存储在单独的列中

javascript - 如何使敌人看起来与英雄不同 Canvas socket.io

ssl - SSL 证书究竟是如何验证的?

mysql - bash: 从 mysql 查询中输出\n\t 个字符

mysql - MySQL修剪或使用子字符串定位获取特定的字符串集

javascript - meteor .js 错误 : Exception from sub xGHk6PkFTQ9uv8ncg TypeError: Cannot call method 'find' of undefined

javascript - Socket.io > 简单的服务器到客户端消息

c++ - 使当前套接字服务器设计适应 SSL(C++、GSK、spawnp())

http - 当服务器不存在时,是否通过HTTP POST发送数据?