前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >提供使用国密算法的MySQL

提供使用国密算法的MySQL

作者头像
bisal
发布2022-10-31 10:38:18
1.2K0
发布2022-10-31 10:38:18
举报

在当前的形势下,各种国产技术的需求,比以往都要紧迫,借鉴徐老师的这篇文章《国密算法 + 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登录,

代码语言:javascript
复制
ssh -i <privatekey>  opc@<public IP> 
sudo yum update
sudo yum install wget

下载BabaSSL 8.3.2稳定源代码

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

代码语言:javascript
复制
wget https://github.com/Tongsuo-Project/Tongsuo/archive/refs/heads/8.3-stable.zip
unzip 8.3-stable.zip

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

代码语言:javascript
复制
cd Tongsuo-8.3-stable
 mkdir bld
 ../config
 make

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

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

代码语言:javascript
复制
sudo make install

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

代码语言:javascript
复制
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH

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

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

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

代码语言:javascript
复制
openssl version
openssl -v ciphers|grep SM

结果显示如下,

代码语言:javascript
复制
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社区版本,

代码语言:javascript
复制
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),

代码语言:javascript
复制
sudo systemctl start mysqld

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

代码语言:javascript
复制
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设置,

代码语言:javascript
复制
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,

代码语言:javascript
复制
sudo vi /etc/systemd/system/multi-user.target.wants/mysqld.service

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

代码语言:javascript
复制
Environment=LD_LIBRARY_PATH=/usr/local/lib64

重新加载并重启mysqld服务。

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

代码语言:javascript
复制
sudo systemctl daemon-reload
sudo systemctl restart mysqld

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

a04f1f0f28438fb184c44db1085ca001.png
a04f1f0f28438fb184c44db1085ca001.png

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

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

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

代码语言:javascript
复制
mysql -uroot -h127.0.0.1 -P3306 -p -e "status;"

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

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

代码语言:javascript
复制
mysql > show variables like '%tls%';
mysql > show status like '%tls%';

结果显示,

代码语言:javascript
复制
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,

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档