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/