如何创建允许 PHP 通过 SSL 连接到 MySQL 的证书?

Posted

技术标签:

【中文标题】如何创建允许 PHP 通过 SSL 连接到 MySQL 的证书?【英文标题】:How do I create certificates that allow PHP to connect to MySQL over SSL? 【发布时间】:2022-01-12 04:43:38 【问题描述】:

我正在尝试从 php 连接到 mysql,但它失败并在日志中显示此错误:

PHP 警告:mysqli::real_connect():SSL 操作失败,代码为 1。OpenSSL 错误消息: 错误:14094418:SSL 例程:ssl3_read_bytes:tlsv1 alert unknown ca

我已经通过命令行标志成功连接:

mysql -u username -password -h host -P port -D dbname

所以这意味着我的服务器可以连接,这不是防火墙问题或密码错误。

这是我用来连接的 PHP 代码:

// start connection
$new_connection = mysqli_init(); 

// set SSL
$new_connection->ssl_set('/etc/my.cnf.d/certs/client-key.pem','/etc/my.cnf.d/certs/client-cert.pem', NULL, NULL, NULL);

// set credentials
$new_connection->real_connect('host', 'user', ' password', 'dbname', port, NULL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);

我认为我的问题可能是我的 SSL 证书无效。如何重新创建这些证书?

【问题讨论】:

【参考方案1】:

终于解决了这个问题。该解决方案可能看起来很愚蠢,但它可以帮助像我这样的人。

刚刚去掉了ssl_set函数,把real_connect中的MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT改成了MYSQLI_CLIENT_SSL

这是工作代码:

// start connection
$new_connection = mysqli_init(); 

// set credentials over SSL
$new_connection->real_connect('host', 'user', 'password', 'database', port, NULL, MYSQLI_CLIENT_SSL);

【讨论】:

以上是关于如何创建允许 PHP 通过 SSL 连接到 MySQL 的证书?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 SSL 连接到 Amazon RDS?

使用 PHP 通过 IMAP 连接到 Gmail - SSL 上下文失败

PHP PDO 使用 SSL 连接到 MS SQLServer Express

通过 SSL 上的 PHP PDO 连接到 MSSQL 服务器

使用 SSH 通过 Squid 与 SSL 碰撞连接到 Git

使用带有 --ssl 的 PHP PDO 连接到 MySQL/MariaDB,无需证书