我正在尝试使用以下代码(在PHP 5.4.4的Debian GNU/Linux 7(轻巧)上)建立与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而不是从build文件夹中的sapi/cli/php运行php时出现此错误?

我意识到我的PHP已经过时了,但是直到下一个维护窗口我才能更新它,并且我认为到目前为止我所做的一切证明这不是版本问题。

最佳答案

在您的示例中,您未在证书的PDO连接字符串中使用完整路径:
PDO::MYSQL_ATTR_SSL_CA => 'mysqlCertificates/caChain.pem'
您能否尝试完整路径,如下所示
PDO::MYSQL_ATTR_SSL_CA => '/fullpath/to/mysqlCertificates/caChain.pem'

关于php - PHP:PDO(MySQL)SSL连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29634341/

10-11 23:13
查看更多