1. 程式人生 > >使用SSL安全連線MySQL資料庫

使用SSL安全連線MySQL資料庫

當使用非加密方式連線MySQL資料庫時,在網路中傳輸的所有資訊都是明文的,可以被網路中所有人擷取,敏感資訊可能被洩露。在傳送敏感資訊(如密碼)時,可以採用SSL連線的方式。 一、配置MySQL服務端支援SSL連線 1. MySQL 5.7.6以前版本的配置方法: a. 使用命令手工建立SSL檔案:
# pwd
/data/mysql562
# mkdir certs
# cd certs
建立CA檔案:
# openssl genrsa 2048 > ca-key.pem
# openssl req -new -x509 -nodes -days 3600 \
> -key ca-key.pem -out ca.pem
建立服務端公鑰和私鑰:
# openssl req -newkey rsa:2048 -days 3600 \
> -nodes -keyout server-key.pem -out server-req.pem
# openssl rsa -in server-key.pem -out server-key.pem
# openssl x509 -req -in server-req.pem -days 3600 \
> -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
建立客戶端公鑰和私鑰:
# openssl req -newkey rsa:2048 -days 3600 \
> -nodes -keyout client-key.pem -out client-req.pem
# openssl rsa -in client-key.pem -out client-key.pem
# openssl x509 -req -in client-req.pem -days 3600 \
> -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
# chown mysql.mysql -R /data/mysql562/certs
檢查建立的檔案:
# ll
-rw-r--r--. 1 mysql mysql 1679 3月  10 11:44 ca-key.pem
-rw-r--r--. 1 mysql mysql 1220 3月  10 11:44 ca.pem
-rw-r--r--. 1 mysql mysql 1090 3月  10 11:49 client-cert.pem
-rw-r--r--. 1 mysql mysql 1675 3月  10 11:49 client-key.pem
-rw-r--r--. 1 mysql mysql  952 3月  10 11:49 client-req.pem
-rw-r--r--. 1 mysql mysql 1090 3月  10 11:47 server-cert.pem
-rw-r--r--. 1 mysql mysql 1679 3月  10 11:46 server-key.pem
-rw-r--r--. 1 mysql mysql  952 3月  10 11:46 server-req.pem


b. 修改MySQL服務端配置檔案/etc/my.cnf,增加以下引數:
[mysqld]
ssl-ca=ca.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem


2. MySQL5.7.6及以後版本的配置方法: a. 使用MySQL提供的指令碼建立SSL檔案,會建立到資料庫所在目錄中:
# pwd
/usr/local/mysql
# ./bin/mysql_ssl_rsa_setup
# cd /data/mysql3306/data/
# chown mysql.mysql *
# ll
-rw-------. 1 mysql mysql     1679 3月  10 13:21 ca-key.pem
-rw-r--r--. 1 mysql mysql     1074 3月  10 13:21 ca.pem
-rw-r--r--. 1 mysql mysql     1078 3月  10 13:21 client-cert.pem
-rw-------. 1 mysql mysql     1675 3月  10 13:21 client-key.pem
-rw-------. 1 mysql mysql     1679 3月  10 13:21 private_key.pem
-rw-r--r--. 1 mysql mysql      451 3月  10 13:21 public_key.pem
-rw-r--r--. 1 mysql mysql     1078 3月  10 13:21 server-cert.pem
-rw-------. 1 mysql mysql     1679 3月  10 13:21 server-key.pem

b. 修改MySQL服務端配置檔案/etc/my.cnf,增加以下引數:
[mysqld]
ssl-ca=ca.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem

二、配置客戶端以SSL方式連線MySQL: 在伺服器端配置了SSL引數後,客戶端發起連線時預設使用SSL方式。 1. 命令列方式使用SSL連線:
# mysql -h192.168.20.246 -P 3306 -uroot -p
Enter password: 
mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper

Connection id:          4
Current database:
Current user:           
[email protected]
SSL: Cipher in use is DHE-RSA-AES256-SHA Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.17 MySQL Community Server (GPL) Protocol version: 10 Connection: 192.168.20.246 via TCP/IP Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: gbk Conn. characterset: gbk TCP port: 3306 Uptime: 4 min 42 sec

2. 以非加密方式連線MySQL:
# mysql -h192.168.20.246 -P 3306 -uroot -p --ssl-mode=DISABLED
Enter password: 
mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper

Connection id:          7
Current database:
Current user:           [email protected]
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.17 MySQL Community Server (GPL)
Protocol version:       10
Connection:             192.168.20.246 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 6 min 5 sec
3. 設定使用者必須以SSL方式連線MySQL資料庫:
mysql> create user [email protected]'%' identified by 'XXxx_123' require ssl;
mysql> grant select on *.* to [email protected]'%';

此時以非加密方式連線會報錯:
# mysql -h192.168.20.246 -P 3306 -uhy -p --ssl-mode=DISABLED
Enter password: 
ERROR 1045 (28000): Access denied for user 'hy'@'192.168.20.253' (using password: YES)
三、啟用X509身份認證 使用上述步驟建立的符合X509格式的CA檔案、公鑰、私鑰可以對連線進行身份認證,進一步提高連線的安全性。需先將CA檔案、公鑰、私鑰分發給客戶端。 1. 設定使用者必須以X509方式驗證身份後連線資料庫:
mysql> create user [email protected]'%' identified by 'XXxx_123' require x509;
mysql> grant select on *.* to [email protected]'%';

2. 在客戶端使用分發的CA檔案、公鑰、私鑰連線資料庫:
# mysql -h192.168.20.246 -P 3306 -uhrb -p --ssl-ca=./ca.pem --ssl-cert=./client-cert.pem --ssl-key=client-key.pem
Enter password: 
mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper

Connection id:          14
Current database:
Current user:           [email protected]
SSL:                    Cipher in use is DHE-RSA-AES256-SHA
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.17 MySQL Community Server (GPL)
Protocol version:       10
Connection:             192.168.20.246 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 35 min 2 sec

此時若不指定CA檔案、公鑰、私鑰,僅使用SSL連線資料庫會報錯:
# mysql -h192.168.20.246 -P 3306 -uhrb -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'hrb'@'192.168.20.253' (using password: YES)

相關推薦

使用SSL安全連線MySQL資料庫

當使用非加密方式連線MySQL資料庫時,在網路中傳輸的所有資訊都是明文的,可以被網路中所有人擷取,敏感資訊可能被洩露。在傳送敏感資訊(如密碼)時,可以採用SSL連線的方式。 一、配置MySQL服務端支援SSL連線 1. MySQL 5.7.6以前版本的配置方法: a.

Java連線Mysql資料庫警告 Establishing SSL connection without server'

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

jdbc連線mysql資料庫報時區錯誤和SSL連線錯誤

錯誤1:時區錯誤 報錯資訊: com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value '?й???????' is unrecognized or represe

ERROR:java連線mysql資料庫8.0以上版本

先上解決辦法: 1、修改jdbc.properties    原來是: jdbc.url=jdbc:mysql://localhost:3306/language_protection?useUnicode=true&characterEncoding=UTF

PHP 連線mysql資料庫

報錯: Warning: mysqli::mysqli(): (HY000/2002): No such file or directory <span style="font-size:18px;">cd /var sudo mkdir m

連線mysql資料庫連線報錯,是pom檔案配置mysql連線驅動版本號問題

前一段時間安裝了最新的mysql 8.0.11,然後啟動一個專案的時候報錯資訊如下: [ERROR] 2018-08-14 17:28:21,246 method:com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:6

mac下的用idea配置jsp+tomcat連線mysql資料庫的環境

第一步 這裡假設IDEA和tomcat都以配置完成,僅差連線資料庫。 去這裡下載連線Mysql所需要的驅動程式mysql-connector-java-5.1.47-bin.jar。 第二步 下載完成後解壓獲取 並把它放在和tomcat伺服器的lib同一個資料夾下

使用Eclipse的JDBC連線Mysql資料庫

因為好久沒有弄資料庫和程式碼,今天心血來潮,弄個簡單的連線恢復一下記憶。 環境:MySQL任意版本;eclipse任意版本;JDBC驅動jar包; 1.MySQL安裝完畢後,建立資料庫,建立表; Enter password:*******  //出現welcome to th

jdbc連線Mysql資料庫實現crud

一.首先下載jdbc連線包 https://www.mysql.com/products/connector/ 二:然後解壓出來就可以看見下面兩個壓縮檔案 開啟eclise,假設已經建立好一個java專案 右鍵單擊專案名然後選擇如下圖所示步驟操作就好: 專案名

RF自定義資料庫訪問模組,連線mysql資料庫

程式碼簡單,不多贅述 import MySQLdb class Mysqlexc(): database_name = 'payment' host = '1.1.1.2' port = '3306' username = 'root' passwor

SpringBoot框架與MyBatis整合,連線Mysql資料庫

  SpringBoot是一種用來簡化新Spring應用初始搭建及開發過程的框架,它使用特定方式來進行配置,使得開發人員不再需要定義樣板化的配置。MyBatis是一個支援普通SQL查詢、儲存和高階對映的持久層框架,它消除了幾乎所有的JDBC程式碼和引數的手工配置以及對結果集的檢索封裝,可以使用簡單的XML或註

【TCL】使用TCL連線Mysql資料庫之編譯mysqltcl(TCL安裝在CentOS 7中)

最近在用tcl,想著連線mysql,從網上查了一下發現用mysqltcl比較好,不過需要自己編譯,使用過程遇上一些問題,因此就總結了一下。首先是先編譯mysqltcl。說明一下,我的tcl是通過yum install tcl命令直接安裝的,因此不同安裝方式tcl路徑可能有變化,例如如果是通過rpm安

Django連線mysql資料庫操作

Y12 1、建立工程 django-admin startproject django_3 2、建立app python manage.py startapp app1 3、Mysql資料庫配置  (1)啟動資料庫    1>若沒啟動,先在管理員模式下直接啟動mysql:

flask連線mysql資料庫的一對一,一對多,多對多的處理關係。

Y18    以學生表與班級表為例,進行一對一,與一對多操作說明。 簡單部署: 1、建立flask資料夾,在資料夾中建立python檔案,命名為app,其中程式碼: from flask import Flask app = Flask(__name__) 2

flask連線mysql資料庫操作增刪改查的簡單封裝函式

Y17 1、建立python資料夾,命名為app,建立並返回一個WGSI應用程式物件 from flask import Flask app = Flask(__name__) # 定義函式封裝路由配置 def path(route, fun, *, methods=['GE

django連線mysql資料庫的一對一,一對多,多對多關係模型的建立

Y19   介紹如何建立各種關係的資料模型,具體實現各種功能 先配置settings.py中連線mysql資料庫:(Y12有介紹) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.m

【Mac系統 + Python + Django】之開發一個釋出會系統【Django模型(二)】 【Mac系統 + Mysql】之安裝Mysql資料庫 【Python + Mysql】之用pymysql庫連線Mysql資料庫並進行增刪改查操作

上一部分給大家介紹Django的檢視。 接下來繼續來了解Django框架,來看第二部分,此部分是對資料庫的操作。   目錄: 一、設計系統表 二、admin後臺管理 三、基本資料訪問(SQLite資料庫) 四、Django配置MySQL   &

python django建立資料庫表並連線mysql資料庫(附mysql 8.0.12安裝)

先寫下mysql zip安裝方式,在環境變數中加入mysql/bin路徑,把zip解壓到C:\program files下,在最外層資料夾建立my-default.ini 寫入內容: [mysqld]  basedir=C:\Program Files\MySQL data

Python進階(二十二)-Python3使用PyMysql連線mysql資料庫

分享一下我的偶像大神的人工智慧教程!http://blog.csdn.net/jiangjunshow 也歡迎轉載我的文章,轉載請註明出處 https://blog.csdn.net/mm2zzyzzp Python進階(二十二)-Python3使用PyMys

jdbc連線mysql資料庫(或oracle)驗證通過,並操作資料庫

1.連線資料庫其實很簡單,直接粘程式碼,首先我們先複製mysql的jar包 2.再建立資料庫連線資訊檔案,寫入檔案,DRIVER可以照抄,URL是本地的資料庫資訊,如果是伺服器的資料庫可以將localhsot改成伺服器Ip,使用者名稱和密碼是資料庫的。 3.建立一個db類,第一個