如何创建允许 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 的证书?的主要内容,如果未能解决你的问题,请参考以下文章
使用 PHP 通过 IMAP 连接到 Gmail - SSL 上下文失败
PHP PDO 使用 SSL 连接到 MS SQLServer Express
通过 SSL 上的 PHP PDO 连接到 MSSQL 服务器