提供使用国密算法的MySQL

news/2024/11/17 15:54:37/

在当前的形势下,各种国产技术的需求,比以往都要紧迫,借鉴徐老师的这篇文章《国密算法 + MySQL》,学习创建使用国密算法的MySQL数据库。

中国加密标准的SM1、SM2、SM3、SM4、SM7、SM9等,借助国际加密标准,我们可以利用来自开源的加密库实现,例如,最常用和最流行的加密库之一是OpenSSL。

本文旨在使用有SMx(中国加密库)的“OpenSSL”库的BabaSSL,加上 MySQL的TLS设置,提供使用国密算法的MySQL。BabaSSL不是唯一采用 MySQL 的中国加密标准,  来自其他的中国加密供应商/开源的/兼容的/最新的 OpenSSL 库,也会支持类似的方式来实现MySQL国密TLS加密。

测试环境(用于分享)

1. 计算机资源(VM)。

2.  操作系统 - 计算机VM配备Oracle Linux 8。

3.  通过公用yum的存储库安装MySQL社区版本8.0。

4. 使用BabaSSL 8.3[BabaSSL 8.3.2-dev]。它基于2020年9月22日的OpenSSL 1.1.1h版本。

介绍

MySQL利用OpenSSL库通过通信通道为密码提供TLS加密。为了允许使用中国标准和MySQL切换OpenSSL库,可使用OpenSSL兼容的BabaSSL以强制使用中国加密标准进行通信。

安装和使用

1.  提供虚拟机和操作系统/包更新。

2. 下载BabaSSL 8.3.2稳定源代码。

3. Compile BabaSSL并以安装。

4. 安装MySQL 8.0.30(来自yum 存储库)。

5. 使用SMx for MySQL配置TLS。

6. 使用BabaSSL库路径来更改mysqld的系统服务。

7. 重新加载并重启mysqld服务。

8. MySQL (mysql) 客户端与BabaSSL库通过TLS与SMx连接。

配置虚拟机和操作系统/包更新

计算实例 (VM) 使用Oracle Linux 8进行配置。VM配置好并准备好连接,登录到shell终端并进行更新。

从终端Terminal SSH登录,

ssh -i <privatekey>  opc@<public IP> 
sudo yum update
sudo yum install wget

下载BabaSSL 8.3.2稳定源代码

要下载8.3稳定源zip文件,并执行以下命令和解压zip文件,

wget https://github.com/Tongsuo-Project/Tongsuo/archive/refs/heads/8.3-stable.zip
unzip 8.3-stable.zip

要Compile代码,请将目录更改为解压后的文件目录“Tongsuo-8.3-stable”并执行以下命令,

cd Tongsuo-8.3-stablemkdir bld../configmake

BabaSSL的安装会放于/usr/local/bin 和 /usr/local/lib64以及相应的默认安装路径。

注意:默认安装不会替换任何标准操作系统系统自带的OpenSSL档案,而是将其放入/usr/local作为選用安装。

sudo make install

更改/etc/profile并附加以下内容,

export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH

退出终端并重新登录虚拟机。

以SSH连接到附加了新库路径的计算VM(来自更新过的/etc/profile)。

并检查BabaSSL和SMx加密,执行以下命令并验证是否安装BabaSSL成功,

openssl version
openssl -v ciphers|grep SM

结果显示如下,

BabaSSL 8.3.2-dev
OpenSSL 1.1.1h  22 Sep 2020
TLS_SM4_GCM_SM3         TLSv1.3 Kx=any      Au=any  Enc=SM4-GCM(128) Mac=AEAD
TLS_SM4_CCM_SM3         TLSv1.3 Kx=any      Au=any  Enc=SM4-CCM(128) Mac=AEAD

利用yum存储库安装MySQL 8.0.30。

在SSH终端上,执行以下命令来安装mysql社区版本,

sudo yum install https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm
sudo yum module disable mysql
sudo dnf install mysql-server

启动mysqld服务,修改密码并查看连接信息。

这个时候的TLS连接时使用操作系统上的OpenSSL (=没开通的国密TLS),

sudo systemctl start mysqld

查看root的临时密码,以临时密码登陆的是不可以使用正常SQL命令。要先改密码,

sudo cat /var/log/mysqld.log|grep temp
mysql –uroot –h127.0.0.1 –p
mysql > set password=‘…..’;
mysql > status

查看“status”信息结果,显示使用Cipher是TLS_AES_256_GCM_SHA384。

修改/etc/my.cnf以使用SMx密码附加TLS设置,

require_secure_transport=ON
tls_ciphersuites=TLS_SM4_GCM_SM3:TLS_SM4_CCM_SM3
tls_version=TLSv1.3

更改mysqld的系统服以至使用BabaSSL库路径。

更新mysqld.service并添加带有LD_LIBRARY_PATH的ENVIRONMENT行以采用BabaSSL,

sudo vi /etc/systemd/system/multi-user.target.wants/mysqld.service

查找文件上的“Environment=MYSQLD_PARENT_PID=1”一行,并在后面添加以下一行,

Environment=LD_LIBRARY_PATH=/usr/local/lib64

重新加载并重启mysqld服务。

执行以下命令重新加载系统服务并启动mysqld,

sudo systemctl daemon-reload
sudo systemctl restart mysqld

从/var/log/mysqld.log检查mysqd.log加密连接支持信息正确无错,

a04f1f0f28438fb184c44db1085ca001.png

日志消息显示TLS连接已配置。

MySQL (mysql) 客户端与BabaSSL库通过TLS与SMx连接。

要使用SMx连接通过TLS登录MySQL,“mysql”客户端必须与 BabaSSL库一起运行。确保LD_LIBRARY_PATH具有/usr/local/lib64并将mysql客户端登录到MySQL服务器,

mysql -uroot -h127.0.0.1 -P3306 -p -e "status;"

状态屏幕显示SSL连接使用的Ciphers是TLS_SM4_GCM_SM3。

在mysql客户端执行以下SQL命令来看看TLS/SSL信息,

mysql > show variables like '%tls%';
mysql > show status like '%tls%';

结果显示,

mysql> show variables like '%tls%';
+------------------------+---------------------------------+
| Variable_name          | Value                           |
+------------------------+---------------------------------+
| admin_tls_ciphersuites |                                 |
| admin_tls_version      | TLSv1.2,TLSv1.3                 |
| tls_ciphersuites       | TLS_SM4_GCM_SM3:TLS_SM4_CCM_SM3 |
| tls_version            | TLSv1.3                         |
+------------------------+---------------------------------+
4 rows in set (0.00 sec)mysql> show status like '%tls%';
+--------------------------+---------------------------------+
| Variable_name            | Value                           |
+--------------------------+---------------------------------+
| Current_tls_ca           | ca.pem                          |
| Current_tls_capath       |                                 |
| Current_tls_cert         | server-cert.pem                 |
| Current_tls_cipher       |                                 |
| Current_tls_ciphersuites | TLS_SM4_GCM_SM3:TLS_SM4_CCM_SM3 |
| Current_tls_crl          |                                 |
| Current_tls_crlpath      |                                 |
| Current_tls_key          | server-key.pem                  |
| Current_tls_version      | TLSv1.3                         |
| Tls_library_version      | OpenSSL 1.1.1h  22 Sep 2020     |
+--------------------------+---------------------------------+
10 rows in set (0.01 sec)

VM上的MySQL服务器/客户端使用SMx TLS连接运行BabaSSL 8.3.2。

参考链接,

https://zhuanlan.zhihu.com/p/132352160

https://github.com/Tongsuo-Project/Tongsuo

https://dev.mysql.com/downloads/repo/yum/

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发pyq,

ef5e5e0e11437ec882c15ddaa8ee0724.png

近期更新的文章:

《MySQL中timestamp数据类型定义》

《魔方的征途 - 魔方如何选择?》

《MySQL中用户密码存在特殊字符的使用场景》

《企业IT运维故障定位方法及工具》

《技术高手是如何炼成的?》

近期的热文:

《"红警"游戏开源代码带给我们的震撼》

文章分类和索引:

《公众号1100篇文章数据统计》


http://www.ppmy.cn/news/402969.html

相关文章

脚本中如何优雅避免MySQL登录提示信息

无论是开发&#xff0c;还是运维&#xff0c;可能我们都写过Linux Shell脚本访问数据库的逻辑&#xff0c;以MySQL为例&#xff0c;登录MySQL数据库时&#xff0c;他会返回一些告警信息&#xff0c;如何优雅地屏蔽这些提示&#xff1f;看到了爱可生开源社区中杨老师的这篇文章《…

win10删除开机密码_Win10技巧:勾掉这几个选项更优体验win10

大家对win 10的体验如何呢&#xff1f;相信各有不同&#xff0c;但如果你遇到开机慢&#xff0c;黑屏&#xff0c;每次开机都选系统等问题&#xff0c;那么就请大家利用几分钟的时间&#xff0c;来了解下吧 开机时间&#xff0c;更新后win10比win8启动慢&#xff0c;启动慢主要…

小白前端自制红警登陆界面(试水前端)

效果图 代码 一&#xff0c;html部分 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><link rel"stylesheet" type"text/css" href"css/zzh.css"/><script type…

MySQL忘了账号密码,除了跑路,还能补救么?

MySQL数据库如果忘了账号的密码&#xff0c;除了重装和跑路&#xff0c;针对不同的版本&#xff0c;还是有很多方案可以解决的&#xff0c;社区的这篇文章&#xff0c;就给出了说明&#xff0c;以备不时之需&#xff0c; https://www.modb.pro/db/429812?utm_sourceindex_ori …

MySQL中用户密码存在特殊字符的使用场景

开源社区推送的这篇文章《故障分析 | 密码使用特殊字符》&#xff0c;介绍了密码中包含特殊字符的情况&#xff0c;算是一个常见的场景&#xff0c;可以将这个问题增加到自己的案例知识库中。 背景 最近在使用脚本新建了一批应用用户&#xff0c;发现一个奇怪的问题&#xff0c…

红警自建服务器,20年前占据中国网吧的红警,现在被老外做成页游,服务器多次被挤爆!...

大家好&#xff0c;这里是正惊游戏&#xff0c;我是正惊小弟。 如果你在2000年左右进入网吧&#xff0c;或许你会看到这样一幅场景&#xff0c;在他们的电脑显示屏上&#xff0c;常会看到满屏闪着红光的坦克&#xff0c;如潮水般扑向围满了光棱塔的基地&#xff0c;一时间爆炸火…

红警2Linux版本

转载自&#xff1a;https://bbs.deepin.org/forum.php?modviewthread&tid197766&extra 下载地址&#xff1a;https://ws28.cn/f/3411yf6wsbh 百度网盘&#xff1a;链接: https://pan.baidu.com/s/1YAKOfj_HQPZu3BnYP5LfVg 密码: 1d2j 全名叫&#xff1a;OpenRA Rom…

红警自建服务器,有大神做了个网页版的红警2,方便打工人上班摸鱼

mumu丨文 前段时间愚人节的时候看到个游戏新闻&#xff0c;说是国外有个叫Chrono Divide的项目&#xff0c;作者用Java重写了红警2的核心程序&#xff0c;复刻了一个红警2页游出来。 是的&#xff0c;你没看错&#xff0c;你可以在网页上与别人联机打红警2。因为是用原版素材&a…