查看原文
其他

国密算法 + MySQL

老叶茶馆 2024-07-08

The following article is from MySQL解决方案工程师 Author 马楚成

中国加密标准

中国加密标准的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 updatesudo yum install wget



下载 BabaSSL 8.3.2 稳定源代码


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


wget https://github.com/Tongsuo-Project/Tongsuo/archive/refs/heads/8.3-stable.zipunzip 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 versionopenssl -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.rpmsudo yum module disable mysqlsudo dnf install mysql-server


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

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


sudo systemctl start mysqld


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


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



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

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


require_secure_transport=ONtls_ciphersuites=TLS_SM4_GCM_SM3:TLS_SM4_CCM_SM3tls_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-reloadsudo 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/


感谢您关注“MySQL解决方案工程师”





《深入浅出MGR》视频课程

戳此小程序即可直达B站

https://www.bilibili.com/medialist/play/1363850082?business=space_collection&business_id=343928&desc=0



文章推荐:



想看更多技术好文,点个“在看”吧!

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存