首頁>Club>
11
回覆列表
  • 1 # PandaAy

    MySQL預設的資料通道是不加密的,在一些安全性要求特別高的場景下,我們需要配置MySQL埠為SSL,使得資料通道加密處理,避免敏感資訊洩漏和被篡改。

    當然,啟用MySQL SSL之後,由於每個資料包都需要加密和解密,這個對MySQL的效能是有不小影響的,讀者們在使用的時候,要根據實際情況斟酌。

    MySQL客戶端登入伺服器時候的密碼不是明文傳輸,有加密策略處理。

    筆者是在 ubuntu12.04 系統上使用MySQL 5.5版本測試的,其他環境請讀者自行匹配。

    配置MySQL伺服器證書

    編輯 /etc/mysql/

    my.cnf

    檔案

    # ssl-ca=/etc/mysql/

    cacert.pem

    # ssl-cert=/etc/mysql/server-

    cert.pem

    # ssl-key=/etc/mysql/server-

    key.pem

    把上面三行預設證書配置註釋開啟,使用自己的證書。筆者就使用上次在搭建自己的CA服務 – OpenSSL CA 實戰文章中生成的證書

    ssl-ca=/home/yunweipai/user_certs/

    ca_cert.cer

    ssl-cert=/home/yunweipai/user_certs/

    web.cer

    ssl-key=/home/yunweipai/user_certs/

    web_key_plain.pem

    這裡需要注意的是,在ubuntu上,配置證書後如果不生效,參考這裡解決方法

    注意上面配置的

    web_key_plain.pem

    檔案,由於MySQL不支援加密後的私鑰,因此我們使用命令

    openssl rsa -in

    web_key.pem

    -passin pass:Yunweipai@123 -out

    web_key_plain.pem

    將私鑰解密。MySQL不支援私鑰加密的原因是從安全性角度考慮,因為如果要使用者傳遞一個加密的私鑰,那麼必須要使用者傳密碼,那麼MySQL怎麼儲存這個密碼呢?這就引出了我們在密碼儲存和傳輸的安全建議裡面提到的一系列問題了。

    所以MySQL為了簡化實現,就不支援私鑰加密。

    指定客戶端連線方式

    MySQL服務端在對客戶端授權的時候,可以透過選項指定客戶端連線MySQL 伺服器的SSL級別,參考MySQL賦權的 REQUIRE值:

    ssl_option

    SSL: 不認證客戶端,客戶端不需要提供證書

    X509: 客戶端必須傳送一個有效的X509證書

    issuer: 客戶端的證書是否是伺服器所配置的CA頒發的(在我們場景下是

    ca_cert.cer

    頒發的證書)

    subject: 認證證書的subject(關於證書的subject在之前的文章有介紹)

    cipher: 指定加密演算法

    這些選項可以疊加使用,如:X509|issuser

    客戶端連線(SSL方式)

    mysql 客戶端連線

    mysql -u root -pChangeme_123 -P 3306 --ssl-ca=/home/yunweipai/user_certs/

    ca_cert.cer

    Welcome to the MySQL monitor. Commands end with ; or \g.

    Your MySQL connection id is 36

    Server version: 5.5.43-0ubuntu0.12.04.1 (Ubuntu)

    Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its

    affiliates. Other names may be trademarks of their respective

    owners.

    Type "help;" or "\h" for help. Type "\c" to clear the current input statement.

    mysql> \s

    --------------

    mysql Ver 14.14 Distrib 5.5.43, for debian-linux-gnu (i686) using readline 6.2

    Connection id: 36

    Current database:

    Current user: root@localhost

    SSL: Cipher in use is DHE-RSA-AES256-SHA

    Current pager: stdout

    Using outfile: ""

    Using delimiter: ;

    Server version: 5.5.43-0ubuntu0.12.04.1 (Ubuntu)

    Protocol version: 10

    Connection: Localhost via UNIX socket

    Server characterset: latin1

    Db characterset: latin1

    Client characterset: latin1

    Conn. characterset: latin1

    UNIX socket: /var/run/mysqld/

    mysqld.sock

    Uptime: 29 sec

    Threads: 1 Questions: 109 Slow queries: 0 Opens: 48 Flush tables: 1 Open tables: 41 Queries per second avg: 3.758

    --------------

    JDBC連線

    在jdbc字串中增加下面引數

    useSSL=true&verifyServerCertificate=false

    這麼就不需要客戶端配置證書了,配置就簡單很多。因為mysql本身有賬號口令認證,因此不需要證書認證。

  • 中秋節和大豐收的關聯?
  • 手機版俠盜獵車手聖安地列斯mod閃退怎麼辦?