AWS EC2上的MySQL 5.7 Ubuntu 16.04
我已经使用自签名证书在ssl上设置了复制。我可以使用ssl-mode = VERIFY_IDENTITY的mysql客户端从从属服务器连接到主服务器。在尝试启用MASTER_SSL_VERIFY_SERVER_CERT启用主机名验证之前,复制还在ssl上进行。
启用该功能后,从属将不再能够与主服务器进行身份验证,并收到io错误2026,这只是一个通用的ssl连接失败错误。日志不再有用,ssldump也不显示,它只是显示在握手开始之前就已中止连接。
根据文档:
要激活主机名身份验证,请添加 MASTER_SSL_VERIFY_SERVER_CERT选项。
和
对于复制连接,请指定 MASTER_SSL_VERIFY_SERVER_CERT = 1对应于设置 --ssl-mode = VERIFY_IDENTITY
而且
主机名身份验证不适用于自签名 证书。
https://dev.mysql.com/doc/refman/5.7/en/replication-solutions-encrypted-connections.html
那么如何在使用自签名证书进行复制的过程中启用主机名验证?文档似乎表明这是不可能的,但是为什么我可以通过ssl-mode = VERIFY_IDENTITY通过客户端进行连接?
谢谢。
答案 0 :(得分:0)
解决方案是将MASTER_SSL_CA,MASTER_SSL_CERT和MASTER_SSL_KEY添加到我的CHANGE MASTER TO语句中,以手动指向ca,cert和key,而不是信任的mysql从配置中读取它们。
据我所知,这意味着mysql文档是错误的。
他们指出,可以在my.cnf的[client]部分中设置路径,但至少对于我来说显然不是这种情况。不论出于何种原因,[client]部分的确似乎由mysql客户端使用,但被忽略了。
我相信我也误解了自签名证书。 MASTER_SSL_VERIFY_SERVER_CERT确实可以工作,因为我实际上没有自签名证书,我的证书由我自己的CA签名。 CA证书本身是自签名的,但是与看起来是自签名的主/从证书不同。
最后,我绝对误会了MASTER_SSL_VERIFY_SERVER_CERT的目的。事实证明,我根本不需要它,因为我的个人CA无论如何都只为该域签名证书,因此通过检查服务器证书的公用名是否与请求的域相匹配就没有任何收获。它总是会的。仅当使用为多个域签名证书的受信任证书颁发机构时,验证才有用。然后,您需要验证证书是否属于您请求的域,否则您将容易受到中间人攻击。
希望这些信息可以帮助其他人。