2015-09-15 21 views
2

我在測試通過SSL連接到MySQL服務器的過程。我可以通過SSL連接使用CLI mysql客戶端,而不會出現問題。但是,試圖通過PHP連接(使用相同的用戶名/主機名/密碼/證書)時,我收到此錯誤信息:如何在MySQL和PHP之間連接SSL?

PHP Warning: PDO::__construct(): SSL operation failed with code 1.
OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /home/username/mysql.php on line 7
PHP Warning: PDO::__construct(): Cannot connect to MySQL by using SSL in /home/username/mysql.php on line 7
PHP Warning: PDO::__construct(): [2002] (trying to connect via tcp://db.server.net:3306) in /home/username/mysql.php on line 7
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] ' in /home/username/mysql.php:7

然而,證書不應該是無效的,因爲使用它們通過連接命令行客戶端的作品,對吧?在PHP/openssl中有什麼可能導致這個問題?

這是我使用的測試腳本(與屏蔽連接信息),我已經在谷歌發現,一切都/其它地方告訴我,這應該工作:

<?php 

$db = new PDO("mysql:dbname=database_name;host=db.server.net", "user_name", "some_password", [ 
    PDO::MYSQL_ATTR_SSL_CERT => "/etc/pki/tls/mysql/remote_client-cert.pem", 
    PDO::MYSQL_ATTR_SSL_KEY => "/etc/pki/tls/mysql/remote_client-key.pem", 
    PDO::MYSQL_ATTR_SSL_CA => "/etc/pki/tls/mysql/remote_ca-cert.pem", 
]); 
+0

我建議[這個博客(http://www.madirish.net/214)和[SO後(http://stackoverflow.com/questions/3657765/php-to-mysql-ssl-連接)鏈接檢出 – zedfoxus

回答

0

我們的系統管理員管理找出問題。

看來,通過MySQL客戶端連接時,該CA沒有被選中,那麼自簽名的證書或(在這種情況下)無效的CA證書的證書仍然可以連接。

PHP,在另一方面,不通過SSL連接到MySQL時,檢查CA。事實證明,我們的客戶端機器上的CA證書文件沒有我們的證書的正確信息,所以PHP不高興,但MySQL客戶端沒有問題。