使用 SSL 的 PHP Mysql 连接无法正常工作 PDO

标签 php mysql ssl php-7

Mysql服务器运行的是php5.3。新的网络服务器正在运行 php7.1(从 php5.3 迁移而来)。当我尝试使用 ssl 连接 Mysql 服务器时,它不起作用。

try {
$dbh = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_SSL_KEY  => '/etc/mysql/client-key.pem',
                                             PDO::MYSQL_ATTR_SSL_CERT => '/etc/mysql/client-cert.pem',
                                             PDO::MYSQL_ATTR_SSL_CA   => '/etc/mysql/ca-cert.pem')
              );
    echo "Connestion established";
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

Connection failed: SQLSTATE[HY000] [2002]

PDO::__construct(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

但是,当我从连接中删除 SSL block 时,它工作正常。我不知道发生了什么。可能是服务器和客户端的版本不匹配。因为我使用的是旧公钥和私钥。

是不是因为mysql客户端和服务器版本不匹配?

PS: 我只在网络服务器上升级了 php7。

最佳答案

因此,在搜索和阅读之后,我认为问题是由于 SSL 处理已在 PHP 5.6 中获得批准并且默认情况下现在启用对等验证。

虽然以下不是关于 mysql 而是关于 fsock,但我认为这篇文章回答了您的问题: https://stackoverflow.com/a/32366242/2459026

您可以禁用对等验证(这往往不是一个好主意)或修复您的根证书。 我认为最好通过禁用对等验证来进行测试,以确保这确实是您的问题。

(请注意,我添加了第二个答案,连同我之前的答案。这不是您问题的答案,但可能与其他人相关)

关于使用 SSL 的 PHP Mysql 连接无法正常工作 PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45090905/

相关文章:

tomcat - 即使密码错误,信任库也能正常工作,为什么?

java - 如何永远信任一个小程序

PHP Unset Array 值对其他索引的影响

php - mod_rewrite : How to redirect HTTP DELETE and PUT

java - Java 的 java.lang.Runtime.exec() 和 PHP 的 exec() 有什么区别?

Mysql 其他表中未引用的行数

c++ - C++ Openssl 中的服务器 key 交换

php - 准备好的语句出现问题

mysql - 创建一个名称中包含空格的表

mysql - Rails 按 Facebook 喜欢程度排序