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

国密算法 + MySQL

作者头像
MySQLSE
发布2022-11-21 20:08:41
1.2K0
发布2022-11-21 20:08:41
举报

中国加密标准

中国加密标准的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-stable
 mkdir bld
 ../config
 make

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 加密连接支持信息正确无错

日志消息显示 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/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL解决方案工程师 微信公众号,前往查看

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

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

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