建议 #1:检查主

建议 #1:检查主

我们已安装 SQL 服务器复制。我试图确保复制是通过安全通道进行的。如果结果为MASTER_SSL_Allowed真(“是”),这是否意味着数据是通过 SSL/TLS 传输的?

如何确保复制连接已加密?如何有效地禁止主服务器和复制服务器之间的流量未加密?

mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.10.100 Master_User: slave_user Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000192 Read_Master_Log_Pos: 37748817 Relay_Log_File: mysqld-relay-bin.000032 Relay_Log_Pos: 1244 Relay_Master_Log_File: mysql-bin.000092 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: omega Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 37748817 Relay_Log_Space: 124980 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: Yes Master_SSL_CA_File: /etc/mysql/certs/omega-ca-cert.pem Master_SSL_CA_Path: Master_SSL_Cert: /etc/mysql/certs/omega-client-cert.pem Master_SSL_Cipher: Master_SSL_Key: /etc/mysql/certs/omega-client-key.pem

答案1

你可以做两件事

建议 #1:检查主

确保 MySQL 在主服务器上启动,使用如下命令my.cnf

[mysqld]
ssl-ca=cacert.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem

登录到 Master,然后运行

SHOW GLOBAL VARIABLES LIKE '%ssl%';

你应该看到类似这样的内容:

+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_openssl  | DISABLED |
| have_ssl      | DISABLED |
| ssl_ca        | ...      |
| ssl_capath    | ...      |
| ssl_cert      | ...      |
| ssl_cipher    | ...      |
| ssl_key       | ...      |
+---------------+----------+

如果有开放 SSL有 SSL被禁用,则 Master 上的 mysqld 不使用 SSL。

请阅读 MySQL 文档ssl_cassl_capathssl_证书ssl_密码ssl_密钥如何使用它们。显然,如果没有设置它们,即使有开放 SSL有 SSL已启用,则 Master 上的 mysqld 不使用 SSL。

建议 #2:检查主服务器上的 MySQL 授权

连接本身应该使用 SSL 选项。在SHOW SLAVE STATUS\G输出中,我看到您有一个名为 的用户slave_user。在主服务器上,请运行以下命令:

SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(host),';')
INTO @slaveusergrants FROM mysql.user WHERE user='slave_user';
PREPARE s FROM @slaveusergrants; EXECUTE s; DEALLOCATE PREPARE s;

在此输出中,您应该看到以下一项或多项内容:

REQUIRE SSL
REQUIRE SUBJECT
REQUIRE X509
REQUIRE ISSUER
REQUIRE CIPHER

如果主服务器上的从属用户在其授权中至少定义了其中一项,则在从服务器上运行的 CHANGE MASTER TO 命令需要与主服务器上的 SSL 设置相匹配。

如需更多说明,请阅读使用 SSL 设置复制来自 MySQL 文档

建议#3:检查实时连接

你应该使用tcpdump 并检查端口 3306。如果您看到纯文本内容,则 SSL 对您不起作用。如果没有,那也不意味着它是加密的。为什么?根据 MySQL 文档中的安全指南(参见页面底部)

不要通过 Internet 传输纯文本(未加密)数据。任何有时间和能力拦截并用于个人目的的人都可以访问这些信息。相反,请使用加密协议(如 SSL 或 SSH)。MySQL 支持内部 SSL 连接。另一种技术是使用 SSH 端口转发为通信创建加密(和压缩)隧道。

学习使用 tcpdump 和 strings 实用程序。在大多数情况下,您可以通过发出以下命令来检查 MySQL 数据流是否未加密:

shell> tcpdump -l -i eth0 -w - src 或 dst port 3306 | strings 这在 Linux 下有效,并且只需进行少量修改即可在其他系统下使用。

警告 如果您没有看到明文数据,这并不一定意味着信息实际上是加密的。如果您需要高安全性,请咨询安全专家。

相关内容