使用 SSL 的 PHP MySQLi 持久连接
Posted
技术标签:
【中文标题】使用 SSL 的 PHP MySQLi 持久连接【英文标题】:PHP MySQLi persistent connections with SSL 【发布时间】:2011-07-25 20:58:05 【问题描述】:我在通过 ssl 配置持久 mysqli 连接时遇到问题。任何建议表示赞赏。
没有持久连接:
$flags = MYSQLI_CLIENT_SSL;
$link = new mysqli();
$link->ssl_set(null, null, null, null, "RC4-MD5");
if ($link->real_connect($host, $user, $pass, $db, $port, null, $flags))
$r = $link->query("SHOW STATUS LIKE 'Ssl_cipher'");
var_dump($r->fetch_row());
输出是
array(2)
[0]=> string(10) "Ssl_cipher"
[1]=> string(18) "RC4-MD5"
使用持久连接:
$flags = MYSQLI_CLIENT_SSL;
$link = new mysqli();
$link->ssl_set(null, null, null, null, "RC4-MD5");
if ($link->real_connect('p:' . $host, $user, $pass, $db, $port, null, $flags))
$r = $link->query("SHOW STATUS LIKE 'Ssl_cipher'");
var_dump($r->fetch_row());
输出是
array(2)
[0]=> string(10) "Ssl_cipher"
[1]=> string(0) ""
更新:我相信这是一个 php 错误 https://bugs.php.net/bug.php?id=55283 - 基本上 ssl_set() 被忽略用于持久连接,在我的情况下,由于服务器配置,这将连接降级为非 ssl。
【问题讨论】:
不知何故,我不认为 ssl over persistent 会起作用。无法保证连接的下一个用户将拥有(或允许使用)相同的 SSL 凭据。 根据您在问题中的描述,我认为持久连接和 SSL 不能一起使用。您能否将您的 PHP 版本添加到问题中? 其实我很确定这是一个php bug bugs.php.net/bug.php?id=55283 【参考方案1】:你必须在 real_connect 之前先运行 mysqli::ssl_set。
http://www.php.net/manual/en/mysqli.ssl-set.php
【讨论】:
操作,错误的复制/粘贴。有 ssl_set()以上是关于使用 SSL 的 PHP MySQLi 持久连接的主要内容,如果未能解决你的问题,请参考以下文章