翻看是或不是扶助 SSL

翻看是否帮衬 SSL

首先在 MySQL 上施行如下命令, 查询是不是 MySQL 扶植 SSL:

mysql> SHOW VARIABLES LIKE 'have_ssl';+---------------+-------+| Variable_name | Value |+---------------+-------+| have_ssl | YES |+---------------+-------+1 row in set 

当 have_ssl 为 YES 时, 表示那个时候 MySQL 服务大器晚成度支撑 SSL 了. 若是是
DESABLE, 则需求在起步 MySQL 服务时, 使能 SSL 功用.

运用 OpenSSL 创制 SSL 证书和私钥

率先我们需求选择 openssl 来成立服务器端的注明和私钥. 笔者利用的 openssl
版本为:

>>> /usr/local/Cellar/openssl/1.0.2j/bin/openssl versionOpenSSL 1.0.2j 26 Sep 2016

新建叁个 ~/temp/cert 目录, 用于存放生成的证书和私钥

mkdir ~/temp/certcd ~/temp/cert

创建 CA 私钥和 CA 证书

接下来, 大家先来生成三个 CA 私钥:

openssl genrsa 2048 > ca-key.pem

当有了叁个 CA 私钥, 大家接下去就足以应用那个私钥生成七个新的数字证书:

openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem

实行那一个命令时, 会要求填写部分难点, 随意填写就足以了. 比如:

>>> openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pemYou are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name  [AU]:CNState or Province Name  [Some-State]:BeijingLocality Name  []:BeijingOrganization Name  [Internet Widgits Pty Ltd]:xysOrganizational Unit Name  []:xysCommon Name (e.g. server FQDN or YOUR name) []:xysEmail Address []:yongshun1228@gmail.com

实践上述命令后, 我们就有了一个 CA 私钥和叁个 CA 证书.

创办服务器端的 F12berlinettaSA 私钥和数字证书

进而, 大家须求创设服务器端的私钥和贰个证件乞请文件, 命令如下:

openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem > server-req.pem

地点这么些命令会生成叁个新的私钥,
同期会动用这么些新私钥来生成四个证件诉求文件.下面这几个命令同样供给应对几个难题,
随意填写就能够. 但是需求在意的是, A challenge password 那生机勃勃项必要为空.即:

>>> openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem > server-req.pemGenerating a 2048 bit RSA private key.................+++..+++writing new private key to 'server-key.pem'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name  [AU]:CNState or Province Name  [Some-State]:BeijingLocality Name  []:BeijingOrganization Name  [Internet Widgits Pty Ltd]:xysOrganizational Unit Name  []:xysCommon Name (e.g. server FQDN or YOUR name) []:xysEmail Address []:yongshun1228@gmail.comPlease enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:

下一步, 大家须要将扭转的私钥转变为 RSA 私钥文件格式:

openssl rsa -in server-key.pem -out server-key.pem

最后一步, 大家需求动用原先生成的 CA 证书来生成叁个劳动器端的数字证书:

openssl x509 -sha1 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

地点的命令会创立以劳动器端的数字证书文件.

创设顾客端的 HavalSA 私钥和数字证书

和服务器端所实行的指令形似,
咱们也必要为顾客端生成叁个私钥和证件需要文件, 命令如下:

openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem > client-req.pem

同样地, 我们供给将转换的私钥调换为 兰德XC90SA 私钥文件格式:

openssl rsa -in client-key.pem -out client-key.pem

最后, 大家也须要为客商端成立多少个数字证书:

openssl x509 -sha1 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

利用工具创建证书与私钥

前方大家介绍了什么行使 OpenSSL 来创建 SSL 连接的私钥和证书文件,
以往大家来看叁个更简短的方法.在 MySQL 5.7 中, 提供了二个名为mysql_ssl_rsa_setup 的工具, 通过它, 大家能够很有利地创造 SSL
连接所要求的各类文件:

mkdir ~/temp/certcd ~/temp/certmysql_ssl_rsa_setup --datadir ./

地点的通令中, –datadir 表示生成的文书的目录.

当推行了上述命令后, 也会生成七个文件:

ca-key.pemca.pemclient-cert.pemclient-key.pemprivate_key.pempublic_key.pemserver-cert.pemserver-key.pem

这几个文件和大家采取 OpenSSL 所创造的那多个文本的功力是均等的,
这里就不再详述了.

SSL 配置

在日前的步子中, 大家早就成形了8个文件, 分别是:

ca-cert.pem: CA 证书, 用于转移服务器端/客商端的数字证书.ca-key.pem: CA
私钥, 用于转移服务器端/顾客端的数字证书.server-key.pem: 服务器端的 奇骏SA
私钥server-req.pem: 服务器端的注解央求文件,
用于转移服务器端的数字证书.server-cert.pem:
服务器端的数字证书.client-key.pem: 顾客端的 CR-VSA 私钥client-req.pem:
顾客端的证书诉求文件, 用于转移顾客端的数字证书.client-cert.pem:
客商端的数字证书.

接下去我们就供给各自安顿服务器端和顾客端.

劳务器端配置

劳务器端要求用到多少个文件, 分别是: CA 证书, 服务器端的 凯雷德SA 私钥,
服务器端的数字证书, 大家须要在 [mysqld] 配置域下加多如下内容:

[mysqld]ssl-ca=/etc/mysql/ca-cert.pemssl-cert=/etc/mysql/server-cert.pemssl-key=/etc/mysql/server-key.pem

随之大家仍然为能够更换 bind-address, 使 MySQL 服务能够接到来自具有 ip
地址的客商端, 即:

bind-address = *

当配置好后, 大家必要重启 MySQL 服务, 使能配置.

末尾一步, 我们增加一个亟需接受 SSL 才足以登入的帐号,
来证明一(Wissu卡塔尔国下大家所陈设的 SSL 是还是不是看到效果:

复制代码 代码如下:GRANT ALL PEvoqueIVILEGES ON
*.* TO ‘ssl_test’@’%’ IDENTIFIED BY ‘ssl_test’ REQUIRE SSL;FLUSH
PRIVILEGES;

当配置好后, 使用 root 登入 MySQL, 施行 show variables like ‘%ssl%’
语句会宛如下输出:

mysql> show variables like '%ssl%';+---------------+-----------------+| Variable_name | Value |+---------------+-----------------+| have_openssl | YES || have_ssl | YES || ssl_ca | ca.pem || ssl_capath | || ssl_cert | server-cert.pem || ssl_cipher | || ssl_crl | || ssl_crlpath | || ssl_key | server-key.pem |+---------------+-----------------+9 rows in set 

顾客端配置

顾客端配置相对轻松一些. 首先大家要求拷贝 ca-cert.pem, client-cert.pem 和
client-key.pem 那四个文件到客商端主机中, 然后我们得以实行如下命令来使用
SSL 连接 MySQL 服务:

mysql --ssl-ca=/path/to/ca-cert.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem -h host_name -u ssl_test -p除去上述的施用命令增势势安插SSL 外, 我们也得以动用安插文件的方式. 即在 ~/.my.cnf
文件中加多如下内容就能够:

[client]ssl-ca=/path/to/ca-cert.pemssl-cert=/path/to/client-cert.pemssl-key=/path/to/client-key.pem

当连接成功后, 大家推行如下指令

mysql> \s--------------mysql Ver 14.14 Distrib 5.7.17, for Linux  using EditLine wrapperConnection id: 14Current database:Current user: ssl_test@172.17.0.4SSL: Cipher in use is DHE-RSA-AES256-SHACurrent pager: stdoutUsing outfile: ''Using delimiter: ;Server version: 5.7.17 MySQL Community Server Protocol version: 10Connection: test_db via TCP/IPServer characterset: latin1Db characterset: latin1Client characterset: latin1Conn. characterset: latin1TCP port: 3306Uptime: 1 hour 2 min 9 secThreads: 1 Questions: 23 Slow queries: 0 Opens: 126 Flush tables: 3 Open tables: 0 Queries per second avg: 0.006--------------

假如出口中有 SSL: Cipher in use is DHE-奥迪Q5SA-AES256-SHA 之类的新闻,
则表示早就接受 SSL 来连接了.

在 Docker 中使能 MySQL SSL 连接

上面我们大概介绍了须臾间假使使能 MySQL SSL 连接, 那么将来我们运用 Docker
来具体的实战生机勃勃把吧!

第风流倜傥拉取最新的 MySQL 镜像:

docker pull mysql

下一场须求计划一下挂载到 Docker 容器的目录布局:

>>> cd ~/temp>>> tree.├── cert│ ├── ca-key.pem│ ├── ca.pem│ ├── client-cert.pem│ ├── client-key.pem│ ├── private_key.pem│ ├── public_key.pem│ ├── server-cert.pem│ └── server-key.pem├── config│ └── my.cnf└── db3 directories, 9 files

在 temp 目录下有四个子目录:

cert 目录用于寄放大家早前变化的注明和私钥音信;config 目录用于寄放 MySQL
服务的布局文件db 目录是用以存放 MySQL 的数据.

下一步大家要求运用如下命令运转 MySQL 容器:

复制代码 代码如下:docker run –rm –name
test_db -p 10000:3306 -e MYSQL_ROOT_PASSWO冠道D=root -v
/Users/xiongyongshun/temp/db:/var/lib/mysql -v
/Users/xiongyongshun/temp/config:/etc/mysql/conf.d -v
/Users/xiongyongshun/temp/cert:/etc/mysql/cert
mysql:latest大家在上头的吩咐中, 大家独家挂载了 cert, config, db
那多个宿主机上的目录到 MySQL 容器中.

开发银行了 MySQL 服务后, 能够先使用 root 帐号登入 MySQL, 来检查 MySQL
服务这时候是否早就拉开了 SSL 成效:

docker run -it --link test_db:test_db --rm mysql sh -c 'exec mysql -u root -p -h test_db'

报到成功后, 我们在 MySQL 中实施如下指令:

mysql> show variables like '%ssl%';+---------------+---------------------------------+| Variable_name | Value |+---------------+---------------------------------+| have_openssl | YES || have_ssl | YES || ssl_ca | /etc/mysql/cert/ca-cert.pem || ssl_capath | || ssl_cert | /etc/mysql/cert/server-cert.pem || ssl_cipher | || ssl_crl | || ssl_crlpath | || ssl_key | /etc/mysql/cert/server-key.pem |+---------------+---------------------------------+9 rows in set 

有地点的输出后, 申明那时候 MySQL 服务已经使用 SSL 效率了.

紧接着下一步, 大家根据前边所涉嫌的, 成立三个独自能够运用 SSL 登陆的帐号,
来查看大家的配置是或不是可行:

复制代码 代码如下:GRANT ALL PTucsonIVILEGES ON
*.* TO ‘ssl_test’@’%’ IDENTIFIED BY ‘ssl_test’ REQUIRE SSL;FLUSH
PRIVILEGES;[code]

地方的下令制造了多少个帐号名称为 ssl_test, 密码为 ssl_test,
并且不限量登陆主机 ip 的帐号.

这么些都配备成功后, 大家再起步二个 MySQL 顾客端容器:

[code]docker run -it –link test_db:test_db –rm -v
/Users/xiongyongshun/temp/cert:/etc/mysql/cert mysql sh -c ‘exec mysql
–ssl-ca=/etc/mysql/cert/ca-cert.pem
–ssl-cert=/etc/mysql/cert/client-cert.pem
–ssl-key=/etc/mysql/cert/client-key.pem -h test_db -u ssl_test -p’

从地点的那么些命令中大家得以看见, 运行 MySQL 顾客端容器时,
大家挂载了宿主机的 cert 目录到容器内的 /etc/mysql/cert 目录,
这样在容器中就足以访问到 SSL 私钥和证件文件了. 接着大家在 MySQL
客商端命令行中, 使用 –ssl-ca, –ssl-cert, –ssl-key 那多少个参数来指定SSL 连接所急需的 CA 证书, OdysseySA 私钥和顾客端证书.

签到成功后, 大家施行 s 命令:

mysql> \s--------------mysql Ver 14.14 Distrib 5.7.17, for Linux  using EditLine wrapperConnection id: 5Current database:Current user: ssl_test@172.17.0.5SSL: Cipher in use is DHE-RSA-AES256-SHACurrent pager: stdoutUsing outfile: ''Using delimiter: ;Server version: 5.7.17 MySQL Community Server Protocol version: 10Connection: test_db via TCP/IPServer characterset: latin1Db characterset: latin1Client characterset: latin1Conn. characterset: latin1TCP port: 3306Uptime: 6 min 8 secThreads: 2 Questions: 10 Slow queries: 0 Opens: 113 Flush tables: 1 Open tables: 106 Queries per second avg: 0.027--------------

出口中有 SSL: Cipher in use is DHE-汉兰达SA-AES256-SHA
新闻则表明大家真正是运用了 SSL 连接的 MySQL 服务器.

相关文章