• window mysql5.7.27 启用SSL openssl mysql_ssl_rsa_setup


    应客户监管部门要求 mysql必须要启用SSL。由于mysql安装在window上,启用过程中遇到了不少的坑,在此记录一下。

    安装openssl

    如果已经安装过可跳过此步

     https://slproweb.com/download/Win64OpenSSL-1_1_1w.msi
    
    • 1

    复制到浏览器下载后安装即可。如果需要其他的openssl版本下载地址参考 https://slproweb.com/products/Win32OpenSSL.html

    生成mysql ssl rsa密钥

    创建目录d:\mysql_ssl用来保存生成的密钥,然后进入mysql安装目录 执行以下命令

      mysql_ssl_rsa_setup.exe -d D:\mysql_ssl
    
    • 1

    这一步很坑 由于对openssl了解不深,执行上面的命令报了如下错误。在网上查了资料少之又少。

    D:\devs\mysql-5.7.27-winx64\bin>mysql_ssl_rsa_setup.exe -d D:\mysql_ssl
    Ignoring -days; not generating a certificate
    Can't open Z:/extlib/_2020Q3__/ssl/openssl.cnf for reading, No such file or directory
    8492:error:02001003:system library:fopen:No such process:crypto/bio/bss_file.c:69:fopen('Z:/extlib/_2020Q3__/ssl/openssl.cnf','r')
    8492:error:2006D080:BIO routines:BIO_new_file:no such file:crypto/bio/bss_file.c:76:
    2023-10-19 10:42:47 [ERROR]   Error generating ca_key.pem and ca_req.pem
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    最后根据错误信息 研究了好一半天 加了openssl的环境变量后,再执行以上命令问题得到了解决。真的是…

    set OpenSSL_HOME=C:\Program Files\OpenSSL-Win64\bin
    set OPENSSL_CONF=C:\Program Files\OpenSSL-Win64\bin\openssl.cfg
    
    • 1
    • 2

    成功生成mysql_ssl_rsa命令的效果如下

    D:\devs\mysql-5.7.27-winx64\bin>mysql_ssl_rsa_setup.exe -d D:\devs\mysql-5.7.27-winx64\mysql_ssl
    Ignoring -days; not generating a certificate
    Generating a RSA private key
    ......+++++
    ...........+++++
    writing new private key to 'ca-key.pem'
    -----
    Ignoring -days; not generating a certificate
    Generating a RSA private key
    .................................................................................................................................+++++
    ............................+++++
    writing new private key to 'server-key.pem'
    -----
    Ignoring -days; not generating a certificate
    Generating a RSA private key
    ......................................................................................................................................+++++
    ..................+++++
    writing new private key to 'client-key.pem'
    -----
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    生成了文件情况列表

    • ca.pem: CA证书
    • ca-key.pem:CA证书密钥
    • client-cert.pem:客户端使用的证书
    • client-key.pem:客户端使用的密钥
    • private_key.pem:私钥
    • public_key.pem:公钥
    • server-cert.pem:服务端使用的证书
    • server-key.pem:服务端使用的密钥
    配置mysql ssl 证书

    在my.ini文件mysqld节点下添加配置

    #服务器CA证书
    ssl-ca= D:\\mysql_ssl\\ca.pem 
    #服务端使用的证书
    ssl-cert= D:\\mysql_ssl\\server-cert.pem
    #服务端使用的密钥
    ssl-key=D:\\mysql_ssl\\server-key.pem
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    重启mysql服务后 查看

     show variables like '%ssl%';
     mysql>  show variables like '%ssl%';
    +---------------+------------------------------------------------------------+
    | Variable_name | Value                                                      |
    +---------------+------------------------------------------------------------+
    | have_openssl  | YES                                                        |
    | have_ssl      | YES                                                        |
    | ssl_ca        | D:\mysql_ssl\ca.pem |
    | ssl_capath    |                                                            |
    | ssl_cert      | D:\mysql_ssl\server-cert.pem |
    | ssl_cipher    |                                                            |
    | ssl_crl       |                                                            |
    | ssl_crlpath   |                                                            |
    | ssl_key       | D:\mysql_ssl\server-key.pem  |
    +---------------+------------------------------------------------------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    此时能看到 have_openssl have_ssl 都已经变为YES 表示SSL开启成功。

    客户端使用证书连接MySQL数据库验证
    mysql -uroot -proot  --ssl-cert=D:\mysql_ssl\client-cert.pem --ssl-key=D:\mysql_ssl\client-key.pem
    
    • 1

    使用mysql命令 带参数–ssl-cert --ssl-key指定mysql客户端证书和客户端密钥进行登录Mysql,登录成功表示验证SSL连接完成。

    另外如果需要强行验证用户必须使用SSL连接的话 在创建用户的时候加上参数 require SSL 表示必须SSL。

    创建用户指定require SSL 示例如下:

    grant all on *.* to 'userssl'@'%' identified by 'userssl' require SSL;
    
    • 1
  • 相关阅读:
    【CSS笔记】CSS布局之五种定位方式(静态、相对、绝对、固定、粘性)
    【launch启动文件播放数据包】
    springboot vue3 elementui plus校园二手交易平台源码
    《机器学习》阅读笔记系列一
    Uncaught TypeError: Cannot read properties of undefined (reading ‘password‘)
    RabbitMQ高级篇 笔记
    el-table的border属性失效问题解决方案
    洛谷P1058 立体图
    ElasticSearch 8.x 安装及集群搭建
    数据库SQL语句执行知识
  • 原文地址:https://blog.csdn.net/tao1992/article/details/133922576