PHP: PDO(MySQL) SSL 连接

8

我正在尝试使用以下代码(在Debian GNU/Linux 7(wheezy)上,使用PHP 5.4.4)建立与MySQL服务器的SSL连接:

$db = new PDO('mysql:host=mysql.myorganization.net;dbname=myDB',
     'username', 'password', array(
        PDO::MYSQL_ATTR_SSL_CA => 'mysqlCertificates/caChain.pem'
));

var_dump($db->query("SHOW STATUS LIKE 'Ssl_cipher';")->fetchAll());

但是我遇到了这个错误:
SQLSTATE[HY000] [2026] SSL connection error: ASN: bad other signature confirmation

我可以使用mysql命令成功建立SSL连接:

mysql -u username -p -h mysql.myorganizataion.net --ssl-ca mysqlCertificates/caChain.pem

我还从源代码编译了PHP 5.4.4,并在没有运行make install的情况下运行了它。

sapi/cli/php ~/Projects/test.php

我得到以下输出。
array(1) {
  [0]=>
  array(4) {
    ["Variable_name"]=>
    string(10) "Ssl_cipher"
    [0]=>
    string(10) "Ssl_cipher"
    ["Value"]=>
    string(18) "DHE-RSA-AES256-SHA"
    [1]=>
    string(18) "DHE-RSA-AES256-SHA"
  }
}

我尝试查找php.ini文件和my.cnf文件中的任何内容,以查看是否有任何可能会干扰连接的问题,但我不确定我在寻找什么。

因此,我的问题是:

当从/usr/bin/php运行php时,为什么会出现这个错误,而在构建文件夹中运行sapi/cli/php时却没有出现呢?

我意识到我的PHP版本已经过期,但在下一次维护窗口之前我无法更新它,并且我认为我已经做了足够的事情证明这不是版本问题。


1
你解决过这个问题吗?我也遇到了几乎相同的问题,很困扰。 - cbo
我没有这么做。这个服务器仍然有这个问题,由于我无法重建它,所以我不得不将我们的代码放在另一个服务器上。 - InfernoTK
1个回答

4
在你的示例中,你在PDO连接字符串中没有使用证书的完整路径:

PDO :: MYSQL_ATTR_SSL_CA =>'mysqlCertificates/caChain.pem'

请尝试像下面这样使用完整路径

PDO :: MYSQL_ATTR_SSL_CA =>'/ fullpath / to / mysqlCertificates / caChain.pem'


1
我使用相对路径和完整路径得到了相同的结果。 - InfernoTK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接