首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP Mysql与SSL的连接不工作PDO

PHP Mysql与SSL的连接不工作PDO
EN

Stack Overflow用户
提问于 2017-07-14 05:07:15
回答 5查看 5.1K关注 0票数 5

Mysql服务器正在运行php5.3。新的New服务器运行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();
}

连接失败: SQLSTATEHY000

PDO::__construct():SSL操作失败,代码为% 1。SSL错误消息: error:1416F086:SSL routines:tls_process_server_certificate:certificate验证失败

但是,当我从连接中删除SSL块时,它工作得很好。我不知道怎么回事。可能是服务器和客户端的版本不匹配。因为我使用的是旧的公钥和私钥。

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

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

EN

回答 5

Stack Overflow用户

发布于 2017-07-18 01:13:04

所以,经过搜索和阅读,我认为这个问题是由于SSL处理在PHP5.6中得到了批准,并且现在默认情况下启用了对等验证。

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

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

(请注意,我在前面的答案旁边添加了第二个答案。这不是你问题的答案,但可能与其他人相关。)

票数 3
EN

Stack Overflow用户

发布于 2017-07-17 23:14:49

您说您“将SSL密钥从一台服务器复制到另一台服务器”。所以有一台新的服务器?新服务器具有新标识,因此远程服务器将拒绝证书,因为ID不匹配。

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

在那之后,我认为它应该会起作用。

即使上面的方法不起作用,我认为最好是通过手动连接到远程主机来调试这个问题。当它正常工作时,您可以尝试设置mysql连接。

票数 1
EN

Stack Overflow用户

发布于 2017-07-23 16:33:51

您可以生成新的SSL证书,并确保使用正确的“通用名称”:

CA: hostname 
Server: FQDN, e.g. hostname.example.com 
Client: somename

重要的部分是服务器证书,其中的通用名称必须与您连接到的主机相同,例如hostname.example.com。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45090905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档