PHP与Mysql的Mysql连接无法正常运行PDO

Ron*_*tel 5 php mysql ssl php-7

Mysql服务器正在运行php5.3.新的webserver正在运行php7.1(从php5.3迁移).当我尝试连接mysql服务器与ssl时,它无法正常工作.

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();
}
Run Code Online (Sandbox Code Playgroud)

连接失败:SQLSTATE [HY000] [2002]

PDO :: __ construct():SSL操作失败,代码为1. OpenSSL错误消息:错误:1416F086:SSL例程:tls_process_server_certificate:证书验证失败

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

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

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

vri*_*ker 1

您说您“将 SSL 密钥从一台服务器复制到另一台服务器”。那么有新服务器了吗?新服务器具有新身份,因此远程服务器将拒绝证书,因为 ID 不匹配。

我认为您应该首先从“known_hosts”文件中删除远程服务器上的行。然后,在 Nginx 服务器上,您应该使用这些 SSH 密钥手动连接到远程服务器,并进行一次连接,以便将新身份添加到known_hosts。

之后我认为它应该有效。

即使上述方法不起作用,我认为最好通过手动连接到远程主机来调试此问题。当它起作用时,你可以尝试设置 mysql 连接。