Archery
Archery copied to clipboard
无法添加开启了ssl 的 mysql实例
问题描述
mysql 实例开启了ssl ,require_secure_transport设置为ON。在平台上添加该实例,将出现错误。
3159, 'Connections using insecure transport are prohibited while --require_secure_transport=ON.
版本信息
- 应用版本/分支:Release v1.7.12
- 部署方式:Docker
开启 ssl 的实例确实没见过, 😅 是不是加个选项就行, 需要有证书吗?
navicat 连接勾选ssl ,不需要添加证书即可连接。mysql 命令行客户端也是不需要做什么特别的也可以连接。 是不是class MysqlEngine 里的mysqldb 的连接需要添加额外参数呢。
https://github.com/hhyo/Archery/blob/3343a7022da21f42614f2d71dde40e8e2c79c216/sql/engines/mysql.py#L30-L48 就在这, 是不是要加个什么选项
mysqldb 需要加ssl 证书,建议是否考虑换成pymysql
在上面的get_connection函数中,如果使用pymysql模块,在connect里添加ssl={"fake_flag_to_enable_tls":True},就可以正常连接开启了ssl的实例。
https://github.com/hhyo/Archery/commit/4ad72880c5bbf970636bedacd9fdcc3a4c59b37f pymysql 去年去掉了, mysqldb 没有办法吗?
基于什么原因去掉pymysql而使用mysqldb呢,mysqldb还没有找到方法
感觉这个fake ssl 也不是特别好的方案, 本来是为了增加安全性, 这样不是会被中间人吗?
感觉要做的话, 可能提供一下 ca 上传比较好
那得看他的fake ssl具体是怎么实现的了,我猜测传输还是加密的。 按理说数据库作为服务端,开启了必须通过ssl的远程连接,如果客户端能这么简单的就破解了不用加密传输,这就不是改变客户端的配置问题了,而是mysql的服务端ssl验证的安全性问题了。 我以为加上ca证书只是加强了客户端的连接验证,但是数据传输始终都是加密的?
需要ssl的可以参考这个进行修改https://github.com/getredash/redash/blob/db4e97fa6f8d4c3e4d0ca37d06b743a22079da8e/redash/query_runner/mysql.py#L75
其实需求是这样的,mysql服务端开启了ssl模式。其他客户端的连接,比如java都只需要加上sslMode=Required就可以正常连接了,都不需要客户端提供ca证书验证的。pymysql模块也可以加参数,但是mysqldb里好像没有这样的方法?因为每个实例都要用ca证书来做身份验证,就搞麻烦了。
MySQLdb支持ssl-model的选项,可以调整为PREFERRED试试 https://github.com/PyMySQL/mysqlclient-python/blob/ca630c01fb39f252a4c91a525e440beea4ac4447/MySQLdb/connections.py#L113-L119
参考:https://dev.mysql.com/doc/refman/5.7/en/connection-options.html#option_general_ssl-mode
感觉这个fake ssl 也不是特别好的方案, 本来是为了增加安全性, 这样不是会被中间人吗?
感觉要做的话, 可能提供一下 ca 上传比较好
MySQL配置ssl,一般都只做服务端单向检验,所以只要客户端信任就行,保证数据传输是加密的,要避免中间人攻击可以给账号配置规则,不过比较少会用到
https://dba.stackexchange.com/questions/205219/why-am-i-connecting-securely-to-mysql-when-i-dont-have-client-certificates
https://dev.mysql.com/doc/refman/5.7/en/create-user.html#create-user-tls
做了代码的debug ,现在用的这个
并没有ssl-mode 的选项
升级到2.0的版本是有的,我这边本地测试可以连接,不过你用ssl,要改的地方比较多,因为执行是通过goinception或者inception去操作,相关的地方也需要调整
AWS 的 redis 连接也需要 TLS 才能管理,这个是否会考虑一并添加呢
AWS 技术支持人员给的答复如下
