暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

提供使用国密算法的MySQL

996

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


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



                                    近期更新的文章:
                                    MySQL中timestamp数据类型定义
                                    魔方的征途 - 魔方如何选择?
                                    MySQL中用户密码存在特殊字符的使用场景
                                    企业IT运维故障定位方法及工具
                                    技术高手是如何炼成的?

                                    近期的热文:
                                    "红警"游戏开源代码带给我们的震撼

                                    文章分类和索引:
                                    公众号1100篇文章数据统计

                                    文章转载自bisal的个人杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                    评论