2016-01-20 266 views
1

所以我需要通過SSL連接到MySQL服務器。我在服務器和客戶端都有root權限。服務器和客戶端上的操作系統都是Ubuntu Linux。該服務器正在運行MySQL 5.5.46。使用ssl連接到MySQL服務器

我產生下列網頁的指示證書:

http://dev.mysql.com/doc/refman/5.5/en/creating-ssl-files-using-openssl.html

這創建了8頁。質子交換膜的文件。我成功地讓服務器在啓用SSL的情況下運行。我知道,因爲如果我得到了MySQL提示的服務器上,然後運行:

mysql> show global variables like 'have_%ssl'; 

我得到:

+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| have_openssl | YES | 
| have_ssl  | YES | 
+---------------+-------+ 

我也穿上了誰將會連接到該服務器的用戶正確的權限。我知道,因爲如果我這樣做:

show grants for <username> 

我在最後得到一個帶有「REQUIRE SSL」的GRANT語句。所以我真的認爲服務器端很好。

從客戶端連接是問題。我可以做,如果我使用了「-p」選項是這樣的:

$ mysql --ssl-ca=./path/to/ca.pem -h <hostname> -u <username> -D <databasename> -p 

接着,我會提示輸入我的密碼,如果我進入它,我可以連接。

但我需要自動化此連接,並將密碼附加到上面的行是一個壞主意(並且永遠不會工作 - 我也想知道)。

那麼,如何以自動方式安全地連接到客戶端而不需要硬編碼密碼?當我按照上面鏈接的說明生成證書時,我得到了八個.pem文檔,其中大部分我都沒有使用。我需要使用client-key.pem嗎?客戶cert.pem?請注意,在命令行上傳遞到這些其他證書的路徑不起作用。也就是說,這樣的:

mysql --ssl-ca=./ca.pem --ssl-cert=./client-cert.pem --ssl-key=./client-key.pem -h <hostname> -u <username> -D <databasename> 

失敗,就像上面的所有其他組合:「訪問被拒絕」

任何幫助深表感謝。

回答

1
mysql> GRANT ALL PRIVILEGES ON database.* to user REQUIRE X509; 

嘗試使用GRANT與REQUIRE X509而不是REQUIRE SSL並忽略IDENTIFIED BY子句。 X509要求客戶提交一份ssl-cert。證書必須由服務器端MySQL配置文件中指定的ssl-ca(證書頒發機構)簽名。換句話說,這將要求服務器驗證客戶端是否有密鑰,密鑰是否由服務器的CA簽署。

對於上述設置,您將需要客戶端密鑰和客戶端證書。客戶端證書將被髮送到服務器以驗證您的客戶端,客戶端密鑰將用於解密來自服務器的消息。在此設置中,您不需要ca.pem,但如果包含它,服務器的證書將根據ca.pem文件進行驗證。