gpt4 book ai didi

mysql - php 5.x 7.x,ssl pdo 错误 : Peer certificate CN =`someName' did not match expected CN ='someIP'

转载 作者:行者123 更新时间:2023-11-28 23:27:25 26 4
gpt4 key购买 nike

我们在端口 3306 上有一个带有 mysql 的服务器。我们有证书和 key ,我们尝试连接到这个服务器。但是我们看到这样的问题:

Peer certificate CN='SomeName' did not match expected CN='someIP'

我已经阅读了很多文章,但找不到 PDO PHP 的答案。最有趣的是,SQLYog 可以连接所有设置。

我读到可以禁用 verify_peer_names(我希望我了解什么是 peer_names...),但前提是我们使用 openssl_{functions} 或 mysqli,而不是 PDO。这两种选择都不适合我。我需要 PDO。

我尝试做的事情:

  • 在 php 版本之间切换。它对我有帮助,但我需要 5.6 或更高版本。对于 php 7.0,同样的错误。
  • 找到另一个版本的 openssl 和 pdo;很快我就明白这是个坏主意:)
  • 在 php.ini 中找到一些设置,但没有针对我的问题的设置,仅用于创建 ssl。

我的连接代码:

$dbInfo = array
(
'dsn' => 'mysql:host=123.45.67.890;dbname=someDB;port=3306',
'user' => 'user',
'pass' => 'userpassword'
);

$con = new PDO
(
$dbInfo['dsn'], $dbInfo['user'], $dbInfo['pass'],
array(
PDO::MYSQL_ATTR_SSL_CIPHER => 'AES256-SHA',
PDO::MYSQL_ATTR_SSL_CA => 'SSLCert/ca-cert.pem',
PDO::MYSQL_ATTR_SSL_KEY => 'SSLCert/client-key.pem',
PDO::MYSQL_ATTR_SSL_CERT => 'SSLCert/client-cert.pem',
)
);

echo 'Connection OK!';

最佳答案

我们通过不使用 IP 地址而是使用机器(+域名)名称作为 CN 和连接设置来使其适用于我们的内部自签名证书。

因此,将 'dbServer1.company.local' 作为服务器证书的 CN,并使用与主机部分相同的 'dbServer1.company.local' 地址PDO 连接的 DSN。如果愿意,您可以只使用 'dbServer1',但请确保在两个地方都使用它。

这会让你继续:

$pdo_options = array(
PDO::MYSQL_ATTR_SSL_KEY => 'path/to/client-key.pem',
PDO::MYSQL_ATTR_SSL_CERT => 'path/to/client-cert.pem',
PDO::MYSQL_ATTR_SSL_CA => 'path/to/ca.pem'
);

PDO::__construct('mysql:host=dbServer1.company.local;dbname=someDB','someUser', 'somePass', $pdo_options);

我们管理我们自己的 DNS,因此解析 dbServer1.company.local 不是问题,但如果您的网络服务器无法解析它,或者您不/不能管理 DNS 条目,那么 hack在您的 etc/hosts 文件中添加如下内容:

10.5.5.20 dbServer1.company.local

10.5.5.20 dbServer1

关于mysql - php 5.x 7.x,ssl pdo 错误 : Peer certificate CN =`someName' did not match expected CN ='someIP' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38719607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com