我們通過創建證書,更新my.cnf,創建具有正確權限的用戶並需要ssl,重新啓動服務並驗證它是否有效服務器端和客戶端(通過mysql命令行)通過遠程連接。我也驗證了PDO能夠在完全相同的設置下正常工作,但在mysql中禁用用戶帳戶中的「require ssl」,因爲它只是靜默地失敗並使用非ssl連接。無法使用ssl連接PDO,但使用ssl連接到mysqli
但是,使用PHP應用程序進行連接時,使用PDO強制ssl無法正常工作,但使用強制ssl使用mysqli可以正常工作。我認爲他們使用相同的驅動程序,兩者都應該正常工作。我得到的錯誤消息是'失敗連接到數據庫[SQLSTATE [2800] [1045]拒絕訪問用戶',但用戶存在,並且此連接與mysqli(force ssl)一起使用,只有當我刪除'在mysql中需要用戶的ssl'。
PHP 5.5.9 CentOS版本6.5(最終) PDO_MYSQL 31年5月5日
讓我知道如果我可以提供任何其他信息。下面是連接示例,
//mysqli
$conn=mysqli_init();
mysqli_ssl_set($conn, $clientkey, $clientcert, $sharedca, NULL, NULL);
if (!mysqli_real_connect($conn, $host, $user, $pass, $db))
{
die("Failed connecting to ssl mysql via mysqli");
}
$res = mysqli_query($conn, "SHOW STATUS like 'Ssl_cipher'");
print_r(mysqli_fetch_row($res));
mysqli_close($conn);
//pdo
$options = array_merge($options, array(
PDO::MYSQL_ATTR_SSL_KEY => $sslkey,
PDO::MYSQL_ATTR_SSL_CERT => $sslcert,
PDO::MYSQL_ATTR_SSL_CA => $sslca,
));
try
{
$pdo = new PDO("mysql:dbname={$db};host={$host}", $user, $pass, $options);
}
catch(PDOException $e)
{
die("Failed connecting");
}
有什麼我應該知道如何正確使用SSL與PDO連接?或者我不得不切換到mysqli,因爲PDO對SSL的支持可能有問題?
謝謝。
檢查這個,它可能會幫助http://stackoverflow.com/questions/9738712/connect-to-remote-mysql-server-with-ssl-from-php –
已經引用這個帖子,這些例子說明我是如何已經連接起來,沒有概念證明,只是從文檔中提取可能。我想在它下面沒有正確連接通過ssl所有這就是爲什麼我被阻止,也許我會看看源代碼,並嘗試像Xdebug如果可能的話。 – user3581488
我知道這是舊的,但..我堅持與完全相同的問題!命令行+ mysqli工作得很好,但PDO返回「訪問被拒絕」。請告訴我,你找到了一個解決方案,你記得它...... – Delphine