使用自签名证书验证复制从属服务器上的主机身份
Verify host identity on replication slave with self-signed certs
MySQL 5.7 Ubuntu AWS EC2 上的 16.04
我已经使用自签名证书通过 ssl 设置了复制。我可以使用带有 ssl-mode=VERIFY_IDENTITY 的 mysql 客户端从从站连接到主站。复制也在 ssl 上工作,直到我尝试启用 MASTER_SSL_VERIFY_SERVER_CERT 以启用主机名验证。
启用后,从站不再能够向主站进行身份验证并收到 io 错误 2026,这只是一个通用的 ssl 连接失败错误。日志没有任何帮助,ssldump 也没有,它只是显示在握手甚至开始之前连接被中止。
根据文档:
To activate host name identity verification, add the
MASTER_SSL_VERIFY_SERVER_CERT option.
和
For a replication connection, specifying
MASTER_SSL_VERIFY_SERVER_CERT=1 corresponds to setting
--ssl-mode=VERIFY_IDENTITY
还有
Host name identity verification does not work with self-signed
certificates.
https://dev.mysql.com/doc/refman/5.7/en/replication-solutions-encrypted-connections.html
那么如何在使用自签名证书进行复制期间启用主机名验证?文档似乎表明这是不可能的,但为什么我可以通过客户端连接 ssl-mode=VERIFY_IDENTITY?
谢谢。
解决方案是将 MASTER_SSL_CA、MASTER_SSL_CERT 和 MASTER_SSL_KEY 添加到我的 CHANGE MASTER TO 语句中,以手动指向 ca、证书和密钥,而不是信任 mysql 从配置中读取它们。
据我所知,这意味着 mysql 文档是错误的。
他们说路径可以在 my.cnf 的 [client] 部分设置,但显然不是这样,至少对我而言。无论出于何种原因,[client] 部分确实被 mysql 客户端使用,但在复制时被忽略。
我相信我也误解了自签名证书。 MASTER_SSL_VERIFY_SERVER_CERT 确实有效,因为我实际上没有自签名证书,我有自己的 CA 签名的证书。 CA 证书本身是自签名的,但这与 master/slave 证书似乎是自签名的不同。
最后,我完全误解了 MASTER_SSL_VERIFY_SERVER_CERT 的目的。事实证明我根本不需要它,因为我的个人 CA 无论如何只为这个域签署证书,所以通过检查服务器证书的通用名称是否与请求的域匹配没有任何好处。它总是会的。只有在使用为许多域签署证书的可信证书颁发机构时,验证才会有帮助。然后您需要验证证书是否属于您请求的域,否则您将容易受到中间人攻击。
希望这些信息对其他人有所帮助。
MySQL 5.7 Ubuntu AWS EC2 上的 16.04
我已经使用自签名证书通过 ssl 设置了复制。我可以使用带有 ssl-mode=VERIFY_IDENTITY 的 mysql 客户端从从站连接到主站。复制也在 ssl 上工作,直到我尝试启用 MASTER_SSL_VERIFY_SERVER_CERT 以启用主机名验证。
启用后,从站不再能够向主站进行身份验证并收到 io 错误 2026,这只是一个通用的 ssl 连接失败错误。日志没有任何帮助,ssldump 也没有,它只是显示在握手甚至开始之前连接被中止。
根据文档:
To activate host name identity verification, add the MASTER_SSL_VERIFY_SERVER_CERT option.
和
For a replication connection, specifying MASTER_SSL_VERIFY_SERVER_CERT=1 corresponds to setting --ssl-mode=VERIFY_IDENTITY
还有
Host name identity verification does not work with self-signed certificates.
https://dev.mysql.com/doc/refman/5.7/en/replication-solutions-encrypted-connections.html
那么如何在使用自签名证书进行复制期间启用主机名验证?文档似乎表明这是不可能的,但为什么我可以通过客户端连接 ssl-mode=VERIFY_IDENTITY?
谢谢。
解决方案是将 MASTER_SSL_CA、MASTER_SSL_CERT 和 MASTER_SSL_KEY 添加到我的 CHANGE MASTER TO 语句中,以手动指向 ca、证书和密钥,而不是信任 mysql 从配置中读取它们。
据我所知,这意味着 mysql 文档是错误的。
他们说路径可以在 my.cnf 的 [client] 部分设置,但显然不是这样,至少对我而言。无论出于何种原因,[client] 部分确实被 mysql 客户端使用,但在复制时被忽略。
我相信我也误解了自签名证书。 MASTER_SSL_VERIFY_SERVER_CERT 确实有效,因为我实际上没有自签名证书,我有自己的 CA 签名的证书。 CA 证书本身是自签名的,但这与 master/slave 证书似乎是自签名的不同。
最后,我完全误解了 MASTER_SSL_VERIFY_SERVER_CERT 的目的。事实证明我根本不需要它,因为我的个人 CA 无论如何只为这个域签署证书,所以通过检查服务器证书的通用名称是否与请求的域匹配没有任何好处。它总是会的。只有在使用为许多域签署证书的可信证书颁发机构时,验证才会有帮助。然后您需要验证证书是否属于您请求的域,否则您将容易受到中间人攻击。
希望这些信息对其他人有所帮助。