【发布时间】:2019-01-22 00:34:42
【问题描述】:
这是我通常使用 SSL 连接到 MySQL 数据库的方式:
$db = mysqli_init();
mysqli_ssl_set(
$db,
NULL,
NULL,
'/etc/ssl/my-certs/ssl-ca.crt.pem',
NULL,
NULL
);
mysqli_real_connect(
$db,
'db.example.com',
'john',
'123456',
NULL,
NULL,
NULL,
MYSQLI_CLIENT_SSL
);
阅读mysqli::options 的PHP 文档时,我注意到MYSQLI_OPT_SSL_VERIFY_SERVER_CERT 选项的存在,我认为这是让MySQLi 验证服务器证书的选项。不幸的是,文档中没有MYSQLI_OPT_SSL_VERIFY_SERVER_CERT 的描述。这个选项的存在让我怀疑我是否一直不安全地连接到 MySQL。现在我想知道安全连接到 MySQL 的正确方法是否是这样的:
$db = mysqli_init();
mysqli_options($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true); // <- Attention.
mysqli_ssl_set(
$db,
NULL,
NULL,
'/etc/ssl/my-certs/ssl-ca.crt.pem',
NULL,
NULL
);
mysqli_real_connect(
$db,
'db.example.com',
'john',
'123456',
NULL,
NULL,
NULL,
MYSQLI_CLIENT_SSL
);
所以,我的问题是:
-
MYSQLI_OPT_SSL_VERIFY_SERVER_CERT是否默认设置为true? -
MYSQLI_OPT_SSL_VERIFY_SERVER_CERT有什么作用? (请引用) - 使用 MySQLi 连接到远程 MySQL 数据库的正确(安全)方法是什么?
(注意:这是What's the difference between MYSQLI_CLIENT_SSL and MYSQLI_OPT_SSL_VERIFY_SERVER_CERT?的后续问题)
【问题讨论】:
-
来自MariaDb知识库MYSQL_OPT_SSL_VERIFY_SERVER_CERT的第二个问题:启用(或禁用)根据服务器主机证书的公用名(CN)验证主机名。