MySQL数据库SSL连接测试

环境信息:Centos7 + MySQL 5.7.21

在该环境上进行SSL连接测试。

MySQL Server 配置:

vi /etc/my.cnf

[mysql]
default-character-set = utf8mb4[client]
default-character-set = utf8mb4# ssl_mode = [ DISABLED | PREFERRED(default if not set) | REQUIRED | VERIFY_CA | VERIFY_IDENTITY ]
# ssl_mode 为客户端可选参数,如果客户端连接时指定了则生效的是客户端连接时指定的参数,如果客户端连接未指定则使用服务端的[client]中的配置参数,如果未配置默认为PREFRED。
#   DISABLED: 非SSL连接。
#   PREFERRED: SSL/no-ssl。如果不配置、默认就是该行为。先尝试SSL连接、如果失败则尝试非SSL连接。
#   REQUIRED: SSL连接。仅尝试SSL连接,SSL连接失败则失败、不会尝试非SSL连接。
#   VERIFY_CA: SSL连接,双向认证。校验ca证书、但不校验证书中的server host name。
#   VERIFY_IDENTITY: SSL连接,双向认证。校验ca证书、同时校验证书中的server host name。
#ssl_mode = PREFERRED
ssl_mode = VERIFY_CA[mysqld]datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sockvalidate_password=off# for ssl enable
# 服务器端配置强制SSL连接、禁止非SSL连接
require_secure_transport = ON
# 下面3个参数如果不配置或者值配置成ca.pem, server-cert.pem, server-key.pem,不加路径,则MySQL默认行为是读取数据目录下的三个文件
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem#for mysqlbinlog enable
server-id=1
log-bin=/var/lib/mysql/mysql-bin
binlog_format=row
expire_logs_days=15
max_binlog_size=500m#utf8mb4
character-set-client-handshake=false
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'# for blob input, default value is 4194304 (4M) if not set
#max_allowed_packet = 100M# for other performance settings
max_connections = 2000
max_connect_errors = 500
back_log = 1000
thread_cache_size = 64
table_open_cache_instances = 500
###show global status like '%open%table%'; Open_tables / Opened_tables 85%~95%
table_open_cache = 10000
table_definition_cache = 2000
innodb_thread_concurrency = 0
max_tmp_tables = 100## common sql commands
## -- show engine innodb status \G;
## -- show global variables like '%thread%';
## -- show global status like '%thread%';
## -- show global status like '%open%table%';
## -- show variables like '%table%';# Disablinr symbolic-links is recommended to prevent assorted security risks
symbolic-links=0log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

编写测试脚本:

vi cmd.sh

#!/bin/sh# ssl-test-qftoolsSQL_SSL="
# check if server start with --ssl:\n
# -- show variables like '%have_ssl%';\n
\n
# check if server force accpet ssl session request ( deny no-ssl requests ):\n
# -- show variables like 'require_secure_transport';\n
\n
# client connected and check current session ssl status:\n
# -- show session status like 'Ssl_cipher';\n
\n
# check ssl configs:\n
# -- show variables like '%ssl%';\n
"
# java keystore.jks generate cmd: keytool -importcert -trustcacerts -file ca.pem -keystore keystore216.jks -storepass 1q2w3eHOST=192.168.1.216
PORT=3306
USER=root
DIR=./ssl_1.216# for MySQL old Versin
#$SSLOPT=--ssl
#$SSLOPT="--ssl --ssl-verify-server-cert"# for MySQL new Version
SSLOPT_DISABLED="--ssl-mode=DISABLED"
SSLOPT_PREFERRED="--ssl-mode=PREFERRED"
SSLOPT_REQUIRED="--ssl-mode=REQUIRED"
# ssl && also perform verification against the server CA certificate but no against the server host name in its certificate.
SSLOPT_CA="--ssl-mode=VERIFY_CA"
# ssl && also perform verification against the server CA certificate and (with VERIFY_IDENTITY) against the server host name in its certificate.
SSLOPT_IDENTITY="--ssl-mode=VERIFY_IDENTITY"CA=$DIR/ca.pem
CERT=$DIR/client-cert.pem
KEY=$DIR/client-key.pem# 客户端连接时不指定相关参数、由服务器配置决定最终行为
CMD0="mysql -h$HOST -P$PORT -u$USER -p "
# 客户端连接指定配置
# no-ssl
CMD1="mysql -h$HOST -P$PORT -u$USER -p $SSLOPT_DISABLED"
# ssl/no-ssl 先尝试SSL连接、如果失败则尝试非SSL连接
CMD2="mysql -h$HOST -P$PORT -u$USER -p $SSLOPT_PREFERRED"
# ssl单向,SSL连接失败则失败、不会尝试非SSL连接
CMD3="mysql -h$HOST -P$PORT -u$USER -p $SSLOPT_REQUIRED"
# ssl单向、虽然多余传ca证书、客户端证书和秘钥(实际上无需传),实际效果还是单向。MySQL Server my.cnf [client] 中如果配置为 ssl_mode = VERIFY_CA ,连接时客户端如果指定ssl_mode参数则会覆盖,以客户端配置优先
CMD4="mysql -h$HOST -P$PORT -u$USER -p $SSLOPT_REQUIRED --ssl-ca=$CA  --ssl-cert=$CERT --ssl-key=$KEY"
# ssl双向认证,不验证hostname
CMD5="mysql -h$HOST -P$PORT -u$USER -p $SSLOPT_CA --ssl-ca=$CA  --ssl-cert=$CERT --ssl-key=$KEY"
# ssl双向认证 && 验证hostname
CMD6="mysql -h$HOST -P$PORT -u$USER -p $SSLOPT_IDENTITY --ssl-ca=$CA  --ssl-cert=$CERT --ssl-key=$KEY"if [ ! $# -eq 1 ] || [ "$1" == "-h" ];thenecho ""echo "Please user: $0 {type}"echo "  type: 0 | 1 | 2 | 3 | 4 | 5 | 6"echo "  type 0 for run: $CMD0"echo "  type 1 for run: $CMD1"echo "  type 2 for run: $CMD2"echo "  type 3 for run: $CMD3"echo "  type 4 for run: $CMD4"echo "  type 5 for run: $CMD5"echo "  type 6 for run: $CMD6"echo -e "\n---------------------\n"echo "About sql for show ssl infos after mysql connected: "echo -e $SQL_SSLexit
fiinputType=$1
if [ -z inputType ];theninputType=1
fiecho "inputType = $inputType"if [ $inputType -eq 0 ];thenecho $CMD0$CMD0
elif [ $inputType -eq 1 ];thenecho $CMD1$CMD1
elif [ $inputType -eq 2 ];thenecho $CMD2$CMD2
elif [ $inputType -eq 3 ];thenecho $CMD3$CMD3
elif [ $inputType -eq 4 ];thenecho $CMD4$CMD4
elif [ $inputType -eq 5 ];thenecho $CMD5$CMD5
elif [ $inputType -eq 6 ];thenecho $CMD6$CMD6
elseecho "ERROR: inputType unsupport!"exit
fi

从MySQL Server服务器拷贝证书和Key到客户端机器上,然后客户端机器上执行相关测试:
[root@localhost ssl_test]# ls -l
total 4
-rwxr--r-- 1 root root 3165 Apr 25 01:40 cmd.sh
drwxr-xr-x 2 root root   62 Apr 24 21:45 ssl_1.216
[root@localhost ssl_test]# ls -l ssl_1.216/
total 12
-rw-r--r-- 1 root root 1107 Apr 24 21:45 ca.pem
-rw-r--r-- 1 root root 1107 Apr 24 21:45 client-cert.pem
-rw------- 1 root root 1679 Apr 24 21:45 client-key.pem


SSL连接测试失败的情况:
./cmd.sh 0
./cmd.sh 1
./cmd.sh 6

SSL连接失败的执行详细信息:
[root@localhost ssl_test]# ./cmd.sh 0
inputType = 0
mysql -h192.168.1.216 -P3306 -uroot -p
Enter password: 
ERROR 2026 (HY000): SSL connection error: CA certificate is required if ssl-mode is VERIFY_CA or VERIFY_IDENTITY
[root@localhost ssl_test]# 

[root@localhost ssl_test]# ./cmd.sh 1
inputType = 1
mysql -h192.168.1.216 -P3306 -uroot -p --ssl-mode=DISABLED
Enter password: 
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
[root@localhost ssl_test]# 

[root@localhost ssl_test]# ./cmd.sh 6
inputType = 6
mysql -h192.168.1.216 -P3306 -uroot -p --ssl-mode=VERIFY_IDENTITY --ssl-ca=./ssl_1.216/ca.pem --ssl-cert=./ssl_1.216/client-cert.pem --ssl-key=./ssl_1.216/client-key.pem
Enter password: 
ERROR 2026 (HY000): SSL connection error: SSL certificate validation failure
[root@localhost ssl_test]# 

SSL连接测试成功的情况:
./cmd.sh 2
./cmd.sh 3
./cmd.sh 4
./cmd.sh 5
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jenkins流水线学习(工具)

Jenkins特意为了更好使用pipeline,开发了一些工具类,方便我们更好地在step中处理各种需求。 一、Pipeline Utility Steps Pipeline Utility Steps 这是个插件,需要在jenkins插件管理安装。参考来源:Jenkins高级篇之Pipeline方法…

解线性方程组——(Gauss-Seidel)高斯-赛德尔迭代法 | 北太天元

一、Gauss-Seidel迭代法 n 3 n3 n3时 A ( a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ) , b ( b 1 b 2 b 3 ) , A\begin{pmatrix} a_{11} & a_{12} &a_{13}\\ a_{21} & a_{22} &a_{23}\\ a_{31} & a_{32} &a_{33}\\ \end{pmatrix} ,\quad b\be…

缓存神器-JetCache

序言 今天和大家聊聊阿里的一款缓存神器 JetCache。 一、缓存在开发实践中的问题 1.1 缓存方案的可扩展性问题 谈及缓存,其实有许多方案可供选择。例如:Guava Cache、Caffine、Encache、Redis 等。 这些缓存技术都能满足我们的需求,但现…

《从零开始的Java世界》10File类与IO流

《从零开始的Java世界》系列主要讲解Javase部分,从最简单的程序设计到面向对象编程,再到异常处理、常用API的使用,最后到注解、反射,涵盖Java基础所需的所有知识点。学习者应该从学会如何使用,到知道其实现原理全方位式…

LAMP(Linux+Apache+MySQL+PHP)环境介绍、配置、搭建

LAMP(LinuxApacheMySQLPHP)环境介绍、配置、搭建 LAMP介绍 LAMP是由Linux, Apache, MySQL, PHP组成的,即把Apache、MySQL以及PHP安装在Linux系统上,组成一个环境来运行PHP的脚本语言。Apache是最常用的Web服务软件&a…

纸箱码垛机:从传统到智能,科技如何助力产业升级

随着科技的飞速发展,传统工业领域正经历着一场重要的变革。作为物流行业重要一环的纸箱码垛机,其从传统到智能的转型升级,不仅提高了生产效率,还大幅降低了人工成本,为产业升级提供了强大助力。星派将探讨纸箱码垛机的…

【Unity】UnityEvent(一)

​UnityEvent----高效管理游戏事件的利器 在游戏开发中,事件系统是实现各种功能的关键组成部分。它允许我们将不同对象之间的交互解耦,使得代码更加模块化和易于维护。而UnityEvent作为Unity引擎提供的一种强大的事件系统工具,为开发者提供了…

CPDA|0到1突破:构建高效数据分析体系的秘密武器

在现今信息爆炸的时代,数据已经渗透到了我们生活的方方面面,成为了决策、创新和竞争优势的关键。因此,构建一套高效的数据分析体系,对于企业和个人而言,都是至关重要的。那么,如何在众多的数据海洋中脱颖而…

分类神经网络1:VGGNet模型复现

目录 分类网络的常见形式 VGG网络架构 VGG网络部分实现代码 分类网络的常见形式 常见的分类网络通常由特征提取部分和分类部分组成。 特征提取部分实质就是各种神经网络,如VGG、ResNet、DenseNet、MobileNet等。其负责捕获数据的有用信息,一般是通过…

5分钟——测试搭建的springboot接口(二)

5分钟——测试搭建的springboot接口(二) 1. 查看数据库字段2. 测试getAll接口3. 测试add接口4. 测试update接口5. 测试deleteById接口 1. 查看数据库字段 2. 测试getAll接口 3. 测试add接口 4. 测试update接口 5. 测试deleteById接口

Java删除文件夹及文件夹下所有子目录及文件

代码 import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;/** * 删除文件夹及文件夹下所有子目录及文件 */ public void deleteFolder() { // 路径 Path directory Paths.get("/your/delete/path"); try (Stream<Pa…

Docker 开启远程安全访问

说明 如果你的服务器是公网IP&#xff0c;并且开放了docker的远程访问&#xff0c;如果没有进行保护是非常危险的&#xff0c;任何人都可以向你的docker中推送镜像、运行实例。我曾开放过阿里云服务器中docker的远程访问权限&#xff0c;在没有开启保护的状态下&#xff0c;几…

通过标准网格点计算等值线

本资源提供了通过输入标准网格点数据计算等值线的接口&#xff0c;接口通过Qt实现&#xff0c;调整部分数据类型后也可转为C代码。 接口使用也比较简单&#xff0c;将本资源的源码添加到工程中&#xff0c;然后调用GetContourlinesByGridPoints_new()函数即可得到等值线。该函数…

C#多线程之(Thread)详解与示例

文章目录 一、线程的基本概念二、C#中创建和启动线程的方法三、线程的生命周期四、线程的状态转换五、线程之间的通信机制六、线程安全的编程实践使用 ConcurrentBag 进行线程安全的数据收集 总结 本文将深入探讨C#多线程编程的核心概念&#xff0c;包括线程的基本概念、创建和…

人工智能技术概述_3.机器学习

1.机器学习定义 广义上来说&#xff0c;机器学习指专门研究计算机怎么模拟或实现人类的学习行为以获取新的知识或技能的学科&#xff0c;使计算机重新组织已有的组织结构并不断改善自身的性能。更加精确地说&#xff0c;一个机器学习的程序就是可以从经验数据E中对任务T进行学习…

LInux常用命令总结(三):用户管理命令与用户组管理命令

1. 用户管理命令 useradd&#xff1a;添加新用户 用法&#xff1a; useradd 用户名 &#xff08;功能描述&#xff1a;添加新用户&#xff09; ​useradd -g 组名 用户名 &#xff08;功能描述&#xff1a;添加新用户到某个组&#xff09;举例&#xff1a;useradd user1 passw…

用 LMDeploy 高效部署 Llama-3-8B,1.8倍vLLM推理效率

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

Springboot 整合 Quartz框架做定时任务

在Spring Boot中整合Quartz&#xff0c;可以实现定时任务调度的功能 1、首先&#xff0c;在pom.xml文件中添加Quartz和Spring Boot Starter Quartz的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…

做外贸而已,千万不要太老实了!

朋友们&#xff0c;跟你们分享个秘密&#xff0c;做外贸&#xff0c;别太实诚了&#xff01;我知道很多新人小伙伴刚入行那会儿&#xff0c;几个月都开不了张单子。原因&#xff0c;就是太老实了&#xff01; 1客户说价格高 新手可能会直说&#xff1a;“亲&#xff0c;我们的…

一些好听且有心意的英文全名Burwood新南威尔士州伯伍德喝酒上脸就是乙醛中毒1. 康奈尔大学官宣恢复标化要求2. 香港城市大学(东莞)正式设立!

目录 一些好听且有心意的英文全名 Burwood新南威尔士州伯伍德 喝酒上脸就是乙醛中毒 1. 康奈尔大学官宣恢复标化要求 2. 香港城市大学&#xff08;东莞&#xff09;正式设立&#xff01; 一些好听且有心意的英文全名 在选择好听且有意义的英文全名时&#xff0c;我们可…