Mysql SSL

Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.


解决办法:

url=jdbc:mysql://127.0.0.1:3306/framework?characterEncoding=utf8&useSSL=true



### MySQL SSL 配置教程及常见问题解决 #### 一、MySQL 实现 SSL 的基本流程 为了保障数据传输的安全性,可以通过启用 SSL 加密来保护客户端与服务器之间的通信。以下是实现这一目标的主要步骤: 1. **创建 SSL 证书和私钥** 创建自签名的 SSL 证书以及对应的私钥文件是第一步操作。这些文件通常包括 `ca.pem` (CA 证书)、`server-cert.pem` (服务器公钥证书) 和 `server-key.pem` (服务器私钥)[^1]。 2. **配置 my.cnf 文件** 编辑 MySQL 的配置文件 (`my.cnf`) 并指定 SSL 相关参数的位置路径。例如: ```ini [mysqld] ssl-ca=/path/to/ca.pem ssl-cert=/path/to/server-cert.pem ssl-key=/path/to/server-key.pem ``` 3. **重启 MySQL 服务** 修改完成后需重新启动 MySQL 服务以应用新的设置。 4. **强制用户使用 SSL 连接** 当创建新用户或者修改现有用户的权限时可以加入 `REQUIRE SSL` 子句,确保该用户仅能通过加密通道访问数据库[^1]。 5. **验证 SSL 是否生效** 使用 SQL 查询语句检查当前用户的 SSL 类型及其使用的密码算法是否正常工作。 ```sql SELECT user, host, ssl_type, ssl_cipher FROM mysql.user; ``` 如果返回结果显示某特定账户具有非空的 `ssl_type` 值,则表明此账号已成功启用了 SSL 功能[^3]。 #### 二、CentOS 下 MySQL 自动化 SSL 设置工具介绍 对于 CentOS 系统上运行的 MySQL 版本大于等于 5.7.6 而言,官方提供了一个名为 `mysql_ssl_rsa_setup` 的脚本来简化 RSA 密钥对生成过程。执行命令如下所示即可完成初始化动作: ```bash ./mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data ``` 上述指令会自动于指定的数据目录下生产必要的 RSA 私钥(`private_key.pem`) 及其匹配的公钥(`public_key.pem`), 同时还会生成 CA 认证所需的其他辅助材料[^2]。 #### 三、可能遇到的问题及解决方案 - **无法加载 SSL 库错误** 若在尝试开启 SSL 支持之后发现报错提示找不到某些库文件,请确认操作系统环境变量 PATH 中包含了 OpenSSL 安装位置;另外还需保证 mysqld 执行主体有足够的读取权限去访问所定义的所有 PEM 格式的证书文档。 - **连接失败或速度变慢** 即便设置了 REQUIRE X509 或者更高强度的身份认证需求,在实际测试过程中仍有可能因为网络状况不佳等原因造成握手阶段耗时过长甚至超时断开的情况发生。此时建议调整 timeout 参数值适当延长等待时间窗口大小。 - **忘记更新客户端程序中的信任链信息** 对应地也需要同步告知前端应用程序开发者关于新增加的安全措施详情,并指导他们按照相应开发框架的要求补充上传根证书副本到各自项目资源包里头以便校验合法性。 ```python import pymysql.cursors connection = pymysql.connect( host='localhost', user='secure_user', password='password', database='test_db', cursorclass=pymysql.cursors.DictCursor, ssl={'ca': '/path/to/client_ca.pem', 'cert': '/path/to/client_cert.pem', 'key': '/path/to/client_key.pem'} ) try: with connection.cursor() as cursor: sql_query = "SELECT VERSION()" cursor.execute(sql_query) result = cursor.fetchone() finally: connection.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值