美文网首页
MySQL配置SSL连接

MySQL配置SSL连接

作者: 这货不是王马勺 | 来源:发表于2023-11-16 11:05 被阅读0次

    查看MySQL服务是否以--ssl选项启动,YES表示当前服务器支持SSL加密:

    show variables like 'have_ssl%';
    

    检查MySQL服务器require_secure_transport系统变量,如果是ON则说明服务器仅允许TLS/SSL加密的TCP/IP连接,一般我们OFF即可

    show variables like 'require_secure_transport%';
    

    检查证书和密钥文件相关的MySQL系统变量:

    show variables like 'ssl%';
    

    以下参数指定加密连接时使用的证书和密钥文件:
    ssl_ca=ca.pem
    ssl_cert=server-cert.pem
    ssl_key=server-key.pem

    MySQL8.0 在启动时会自动生成 SSL 证书、密钥文件,以及 RSA 密钥对文件;或者使用 mysql_ssl_rsa_setup 程序生成上述文件。
    文件就存在数据目录中:
    certs
    ├── ca-key.pem
    ├── ca.pem
    ├── client-cert.pem
    ├── client-key.pem
    ├── server-cert.pem
    └── server-key.pem

    手动创建CA证书(包含CA公钥)和CA私钥

    openssl genrsa 2048 > ca-key.pem
    openssl req -new -x509 -nodes -days 3600 \
            -key ca-key.pem -out ca.pem
    

    先生成服务器公钥、私钥
    使用CA私钥对服务器公钥签名,得到服务器证书 server-cert.pem,证书中包含公钥、所有者、有效期等明文信息,也有经过 CA 私钥加密对公钥、所有者、有效期...加密后的签名

    openssl req -newkey rsa:2048 -days 3600 \
            -nodes -keyout server-key.pem -out server-req.pem
    openssl rsa -in server-key.pem -out server-key.pem
    openssl x509 -req -in server-req.pem -days 3600 \
            -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
    

    先生成客户端公钥、私钥
    使用CA私钥对客户端公钥签名,得到客户端证书 client-cert.pem,一般不需要验证客户端身份,这些文件就不需要用到。当然如果要同时验证 MySQL Server 身份和客户端身份,就需要用到这些文件了。

    openssl req -newkey rsa:2048 -days 3600 \
            -nodes -keyout client-key.pem -out client-req.pem
    openssl rsa -in client-key.pem -out client-key.pem
    openssl x509 -req -in client-req.pem -days 3600 \
            -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
    

    查看证书内容

    openssl x509 -text -in ca.pem
    

    使用CA证书验证数字证书

    openssl verify -CAfile ca.pem server-cert.pem
    

    MySQL 客户端连接 Server 时,通过 --ssl-mode 参数指定:

    • --ssl-mode=PREFFERED,默认行为,client 端尝试使用加密进行连接,如果无法构建加密连接,则会退回到未加密的连接
    • --ssl-mode=REQUIRED时,Client 端需要加密连接,如果无法构建连接,则 Client 端将失败
    • --ssl-mode=DISABLED,Client 端使用未加密的连接
    • --ssl-mode=VERIFY_CA,Client 端需要加密连接,并且还对 CA 证书进行验证
    • --ssl-mode=VERIFY_IDENTITY,Client 端需要加密的连接,并且还针对 CA 证书和其证书中的服务器主机名执行验证

    注意:主机名身份验证 VERIFY_IDENTITY 不适用于由服务器自动创建或使用 mysql_ssl_rsa_setup 手动创建的自签名CA证书。

    指定客户端密钥和证书路径
    在[client]下添加如下代码:

    ssl-ca = /data/3306/ca.pem
    ssl-cert = /data/3306/client-cert.pem
    ssl-key = /data/3306/client-key.pem
    

    相关文章

      网友评论

          本文标题:MySQL配置SSL连接

          本文链接:https://www.haomeiwen.com/subject/tjmewdtx.html