2013-10-14 73 views
2

注:我解決我一直有一個,而同時打字這個問題的問題,我想知道如果我的分辨率連接和SSL實施的正確的順序,也「壞握手」

我在我的sql數據庫連接出現「錯誤的握手」錯誤。它在我嘗試實現最近安裝的ssl時開始。我開始用下面的代碼:

$init =mysqli_init(); 

    $key="path/ftpd-rsa-key.pem"; 
    $cert="path/ftpd-rsa.pem"; 
    $ca="path/cert.pem"; 

    mysqli_ssl_set($init, $key, $cert, $ca, NULL, NULL); 

//This line was my original connection script, which was working. 
//$connection = mysqli_connect("localhost", "username", "password", "database") or die(mysqli_connection_error()); 

    if(!$connection = mysqli_real_connect($init,"localhost", "username", "password", "database")) 
     { 
     die("Connect Error: " . mysqli_connect_error()); 
     } 

我嘗試過各種其他的東西,包括PDO,重建阿帕奇,和周圍的SSL證書和密鑰和東西交換。沒有任何工作。最終我試着回到我正在使用的原始代碼,然後執行ssl:

$connection = mysqli_connect("localhost", "username", "password", "database") or die(mysqli_connection_error()); 

$key="path/ftpd-rsa-key.pem"; 
$cert="path/ftpd-rsa.pem"; 
$ca="path/cert.pem"; 

mysqli_ssl_set($connection, $key, $cert, $ca, NULL, NULL); 

而令我驚訝的是,這工作。我的頁面現在看起來完全正常,沒有「錯誤的握手」錯誤。然而,由於我沒有找到任何教程或材料,所以我想知道這是否確實是安全的。 ssl的全部要點是爲了安全,並且以這種方式進行連接,而不需要ssl。那是問題嗎?

此外,有關「錯誤的握手」錯誤以及導致它的原因的任何信息都將非常有用。如果我們可以創建/鏈接指南或其完整解釋及其原因,這對未來的程序員會很有幫助,因爲我使用Google搜索時提出的解決方案包括從服務器的閒置和切換到PDO降級MySQL的。

+2

SSL只能保護PHP和MySQL之間的通信不被竊聽者攔截。當連接到'localhost'上的MySQL服務器時,它完全沒有意義(如果服務器可以通過套接字/命名管道訪問,可能會被忽略)。 – eggyal

+0

這是在我的服務器上。我的密碼也不是密碼,文件的路徑也不是'path /',要清楚。 –

+0

沒有任何區別。 – eggyal

回答

2

第二段代碼告訴我你的服務器沒有配置/運行證書。這是不好握手的根源。

當您啓動到MySQL的SSL連接(使用您的第一個片段)時,客戶端和服務器都需要完全配置才能這樣做。在MySQL上,這包括SSL證書,CA證書等。這是通過CLI完成的。這通常是使用--ssl-ca,--ssl-cert--ssl-keymysqld命令行參數完成的。

您的第一個片段失敗,因爲MySQL沒有返回有效的SSL握手。

您的第二個片段正在工作,因爲您的mysqli SSL設置在連接已經發生之後發生 - 即它沒有效果。連接已經有效地下降到非SSL。

考慮爲mysqld生成證書,使用正確的參數重新啓動它,並查看它是否有效。