本文介紹了PHP 5.x 7.x,SSLPDO錯誤:對等證書CN=`ome Name&;#39;與預(yù)期的CN=&;#39;ome IP&;#39;不匹配的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我們有一臺在端口3306上安裝了MySQL的服務(wù)器。我們有序列化和密鑰,并且我們嘗試連接到此服務(wù)器。但我們看到了這樣的問題:
對等證書CN=‘SomeName’與預(yù)期的CN=‘SomeIP’不匹配
我讀了很多文章,但找不到PDO PHP的答案。最有趣的是,SQLYog可以連接所有設(shè)置。
我讀到我驗證_PEER_NAMES可以被禁用(我希望我理解什么是PEER_NAMES…),但只有在我們使用openssl_{Functions}或mysqli而不是PDO的情況下。這兩種選擇都不適合我。我需要PDO。
我嘗試做的事情:
在php版本之間切換。這對我有幫助,但我需要5.6或更高的版本。對于php 7.0,同樣的錯誤。
找到其他版本的OpenSSL和PDO;很快我就明白這不是一個好主意:)
在php.ini中找到一些設(shè)置,但沒有針對我的問題的設(shè)置,僅用于創(chuàng)建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和連接設(shè)置,使其適用于我們的內(nèi)部自簽名證書。
因此,請將'dbServer1.company.local'
作為服務(wù)器證書的CN,并使用與PDO連接的DSN的主機部分相同的'dbServer1.company.local'
地址。如果您愿意,可以只使用'dbServer1'
,但請確保在兩個位置都使用它。
這將使您繼續(xù)前進(jìn):
$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
不是問題,但如果您的Web服務(wù)器無法解析它,或者您不/不能管理DNS條目,則在您的etc/hosts
文件中侵入類似以下內(nèi)容:
10.5.5.20 dbServer1.company.local
或
10.5.5.20 dbServer1
這篇關(guān)于PHP 5.x 7.x,SSLPDO錯誤:對等證書CN=`ome Name&;#39;與預(yù)期的CN=&;#39;ome IP&;#39;不匹配的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,