我们在端口3306上有一个带有mysql的服务器。我们有sertifications和key,我们尝试连接到这个服务器。但是我们看到了这样的问题:
同行证书CN ='SomeName'与预期的CN ='someIP'
不匹配
我阅读了很多文章,无法找到PDO PHP的答案。最有趣的是SQLYog可以连接所有设置。
我已经读过我可以禁用verify_peer_names(我希望我理解peer_names是什么......),但前提是我们使用openssl_ {functions}或mysqli,而不是PDO。这两个选项都不适合我。我需要PDO。
我试图做的事情:
我的连接代码:
$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!';
答案 0 :(得分:1)
我们通过不使用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条目,那么请将以下内容破解为您的etc/hosts
档案:
10.5.5.20 dbServer1.company.local
或
10.5.5.20 dbServer1