国密算法与MySQL

国密算法标准

有符合中国加密标准的SM1、SM2、SM3、SM4、SM7、SM9等。使用国际加密标准,我们可以利用来自公共可用源的加密库。例如,最常用和最流行的加密库之一是OpenSSL。

本教程旨在提供一个具有SMx(中国加密库)的“SSL”库的步骤,即使用MySQL的BabaSSL。这并不是MySQL采用中国加密标准的唯一途径。应用来自中国加密供应商/源的兼容/最新OpenSSL库可能会以与本教程中所述类似的方式工作。

环境(用于教程共享)

  • 1.计算资源(VM)

  • 2.操作系统-使用Oracle Linux 8配置计算虚拟机

  • 3.通过公共yum存储库安装了8.0.xis的MySQL社区

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

介绍

MySQL利用OpenSSL库通过通信信道提供带有TLS加密的密码。为了允许使用中国标准和MySQL切换OpenSSL库,MySQL可以动态使用底层库功能来强制使用中国加密标准进行通信。

步骤

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

  • 2.下载BabaSSL 8.3.2稳定源代码构建以进行编译

  • 3.编译BabaSSL并安装BabaSSL

  • 4.安装MySQL 8.0.30(从yum存储库)

  • 5.使用SMx为MySQL配置TLS

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

  • 7.重新加载并重新启动mysqld服务

  • 8.使用SMx连接的TLS上的BabaSSL库的MySQL(MySQL)客户端

提供虚拟机和操作系统/软件包更新

计算实例(VM)是用Oracle Linux 8配置的。配置了VM并准备好连接后,登录到shell终端并应用更新和包更新

从终端登录为

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

要编译源代码,请将目录更改为解压缩文件夹“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连接,并附加新的库路径(来自更新的/etc/profile)。

要检查BabaSSL和SMx密码,请执行以下命令并验证是否安装了BabaSSL。

# openssl version
# openssl -v ciphers|grep SM

输出应显示如下:

BabaSSL 8.3.2-dev

OpenSSL 1.1.1h 2020年9月22日

TLS_SM4_GCM_SM3 TLSv1.3 Kx=任何Au=任何Enc=SM4-GCM(128)Mac=AEAD

TLS_SM4_CCM_SM3 TLSv1.3 Kx=任何Au=任何Enc=SM4-CCM(128)Mac=AEAD

安装MySQL 8.0.30(从yum存储库)

在SSH终端上,执行以下操作以安装mysql社区存储库

输出应显示如下:

BabaSSL 8.3.2-dev

OpenSSL 1.1.1h 2020年9月22日

TLS_SM4_GCM_SM3 TLSv1.3 Kx=任何Au=任何Enc=SM4-GCM(128)Mac=AEAD

TLS_SM4_CCM_SM3 TLSv1.3 Kx=任何Au=任何Enc=SM4-CCM(128)Mac=AEAD

安装MySQL 8.0.30(从yum存储库)

在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服务(无中国标准),更改密码并检查连接状态

-启动mysqld服务

sudo systemctl start mysqld

-检查临时根密码并查找临时根密码

# sudo cat /var/log/mysqld.log|grep temp

-使用临时密码登录“mysql”客户端
#mysql–uroot–h127.0.0.1–p

-相应地更改密码

mysql > set password=‘…..’;
mysql > status

状态屏幕显示为“使用中的密码”的SSL输出为TLS_AES_256_GCM_SHA384。

使用SMx为MySQL配置TLS

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

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

使用备用BabaSSL库路径更改mysqld的系统服务

更新mysqld。使用LD_LIBRARY_PATH服务并添加环境行,以采用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

查看mysqd。从/var/log/mysqld登录。日志

应正确显示加密连接消息

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

MySQL(MySQL)客户端,通过具有SMx连接的TLS使用BabaSSL库

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

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

使用mysql客户端执行以下SQL命令

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

输出可以如下所示:

mysql>显示类似“%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)

虚拟机上的MySQL服务器/客户端使用SMx TLS连接与BabaSSL 8.3.2一起运行。

原文标题:China Encryption with MySQL
原文链接:https://mysqlhk.blogspot.com/2022/08/china-encryptionwith-mysql.html


免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论