使用 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 持久连接的主要内容,如果未能解决你的问题,请参考以下文章

php使用mysqli连接Mysql,怎么使用永久连接

php中mysql和mysqli的总结

php中的mysql和mysqli的总结

mysqli扩展和持久化连接

使用PHP / MySQLI / Apache时,在哪里安全地存储证书/密钥?

mysqli_real_connect() 获取 SSL3_GET_SERVER_CERTIFICATE:证书验证失败