我們在端口3306上有一臺帶有mysql的服務器。我們有證書和密鑰,我們嘗試連接到這臺服務器。但我們看到這樣的問題:php 5.x 7.x,ssl pdo錯誤:對等證書CN =`someName'與預期不符CN ='someIP'
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!';
這是一個已知的問題,請參閱:[php bug#71003](https://bugs.php.net/bug.php?id=71003) –
謝謝! 但我仍然不明白我與ssl連接有什麼關係。我讀到他們在一些補丁中修復了它們,他們挖掘了openssl庫,但首先我不擅長在lib中挖掘,其次 - 自己修復lib並不是一個好主意。也許我是carelles,沒有找到答案......如果你爲自己工作並解決了這個問題 - 你能不能告訴我該怎麼做? –