更新2
使用 WireShark 我发现了问题字符串(我希望我做到了):
28 | 9.582638 | 192.168.18.128 | 192.168.18.129 | MySQL Response Error 1043
Run Code Online (Sandbox Code Playgroud)
错误是(根据docs):
Error: 1043 SQLSTATE: 08S01 (ER_HANDSHAKE_ERROR)
Message: Bad handshake
Run Code Online (Sandbox Code Playgroud)
下面是两种情况下WireShark的截图:
从 Windows 8 连接(成功):
来自 CentOS 的连接(失败):
为什么会发生这种情况?
更新
一个有趣的声明:
我与主数据库使用的是Windows 8成功连接(192.168.18.1)
通过在主修改ssluser设置的192.168.18.1
主机-做出了改变:从REQUIRE SSL
到REQUIRE X509
。然而,这在我们的从站到主站连接的情况下不起作用。
我在 CentOS-6.3 中遇到过 SSL 复制问题。我正在使用 OpenSSL 创建客户端和服务器证书,并且客户端和服务器证书都由同一个 CA 签名。
Server IP: 192.168.18.128
Slave IP: 192.168.18.129
MySQL version 5.1.66 SSL
Run Code Online (Sandbox Code Playgroud)
我使用MySQL 帮助页面的“为 MySQL 设置 SSL 证书和密钥”部分收到的所有证书。
服务器的 my.cnf文件: …
我已将我的服务器配置为允许 SSL,并修改了我的客户端 ~/.my.cnf,因此我使用 SSL:
[client]
ssl
ssl-cipher=DHE-RSA-AES256-SHA
ssl-ca=~/certs/ca-cert.pem
Run Code Online (Sandbox Code Playgroud)
当我使用客户端登录并查看状态时,它会在 SSL 行上列出一个密码:
mysql> \s
--------------
SSL: Cipher in use is DHE-RSA-AES256-SHA
Run Code Online (Sandbox Code Playgroud)
如果不安装wireshark 之类的东西来验证连接是否安全,我是否可以根据此信息假设我是通过 SSL 连接的?
我们需要摆脱这些协议,使用更新更强的协议。在 Windows 服务器上,您可以非常轻松地禁用这些旧协议,而仅提供 TLS1.1 或更高版本。但是,正如其他地方所述,如果禁用了这些较低的协议,Microsoft SQL Server 2008 R2 和 SQL Server 2012(至少是标准版)都将无法启动。但是,MS SQL Server 的版本越来越多。有 SQL Server Standard、Business Intelligence、Enterprise、Express、Web 和 Compact 版本。当然还有 SQL Server 2008、2012、2014 和(预发布)2016。
这些版本中哪些支持或将仅支持使用 TLS1.1 或更高版本的协议?
出于安全原因,我们在windows上禁用了TLS 1.0和旧协议,在以下注册表路径下只启用了TLS 1.1和TLS 1.2:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols 之后,SQL服务赢了'不以以下错误开头:
2015-02-13 17:35:10.12 spid13s The server could not load the certificate it needs to initiate an SSL connection. It returned the following error: 0x80090331. Check certificates to make sure they are valid.
2015-02-13 17:35:10.12 spid13s Error: 26014, Severity: 16, State: 1.
2015-02-13 17:35:10.12 spid13s Unable to load user-specified certificate [Cert Hash(sha1) "9B49E2FB65EE880F7C8818A90187F572566C9213"]. The server will not accept a connection. You should verify that the certificate is correctly installed. See "Configuring Certificate for Use by SSL" in …
Run Code Online (Sandbox Code Playgroud) 我无法通过各种 Internet 和 Google 搜索来找到我遇到的 MySQL Workbench 问题的答案。
我还没有找到任何关于如何使这项工作再次发挥作用的答案。
这是 MySQL Workbench 错误,我遇到问题进行故障排除,需要帮助
mysql workbench 无法在 localhost:3306 与用户 root ssl 连接错误连接:需要 ssl,但服务器不支持它
假设有一个 PostgreSQL 服务器正在运行并且它启用了 SSL。使用“标准”Linux 和 PostgreSQL 工具,如何检查其 SSL 证书?
我希望输出类似于您从 running 中获得的输出openssl x509 -text ...
。而且我希望有一个单行或两行的命令行答案,这样我就不必求助于运行数据包嗅探器了。
我无权访问 PostgreSQL 服务器,因此无法直接查看其配置文件。
我没有超级用户登录,所以我无法获得ssl_cert_file
设置的值,然后pg_read_file
就可以了。
使用openssl s_client -connect ...
不起作用,因为 PostgreSQL 似乎不想立即进行 SSL 握手。
通过快速查看psql
文档,我找不到使其在启动时显示该信息的命令行参数。(虽然它确实向我展示了某些密码信息。)
用户能否检索 SQL Server 实例的连接证书(类似于某人检索 HTTP 证书的方式)?如果是这样,如何?
如果 SQL Server 客户端请求加密,则在允许加密连接之前必须验证服务器证书。开发服务器通常配置有自签名证书,在默认客户端设置下不会验证。
要使用自签名证书加密连接,请执行以下任一操作:
"TrustServerCertificate=true"
"ForceEncryption"
为"yes"
。后两个选项在每次建立连接时都会受到中间人攻击。第二,有些客户端不保存连接设置,因此必须为每个新连接重新设置。因此,最理想的解决方案是将证书添加到本地存储(最初需要做更多的工作,但之后是最简单和最安全的选择)。对于域中的用户,证书很容易分发,否则需要在每台计算机上手动安装证书。管理员可以通过直接发送或将其作为网络资源提供给每个用户来提供证书,但有时管理员可能因为其他原因太忙或无响应而无法提供证书。
在这种情况下,如果用户可以直接从 SQL 服务器获取证书将会很有用,就像可以使用浏览器或openssl s_client
. 这在检索证书时仍然容易受到中间人攻击,但提供的窗口比每次有新连接时信任证书要窄得多。
我试图了解不同的设置如何影响我的服务器 - 客户端通信的行为。在服务器上,我安装了一个自签名 CA,并带有已发布的交换证书,该证书也已配置为供我的 SQL 服务使用。
起初,当客户端上尚未安装根 CA 时,我希望看到此连接失败。但无论我做什么,它似乎都有效。
为了更好地理解原因,我试图列出所有选项以及它们应该产生的效果。但我不确定我是否理解正确......
任何人都可以帮我更正并填写这里缺少的部分吗?
在SQL Server 上启用“强制加密”设置时:
Encrypt=True;TrustServerCertificate=True;
我的连接字符串中的设置相同。客户端对是否应该使用加密以及是否应该信任服务器没有发言权。在SQL Server 上启用“强制协议加密”设置时:
在客户端上使用“强制协议加密”设置时:
在服务器和客户端上启用“强制协议加密”设置时:
在服务器上同时启用“强制加密”和“强制协议加密”时:
我通过执行以下操作成功地向单个用户授予了 REQUIRE SSL...
mysql -u"${targetMySqlUser}" -p"${targetMySqlPass}" -e "GRANT USAGE ON dbname.* TO 'dbusername'@'%' REQUIRE SSL;"
Run Code Online (Sandbox Code Playgroud)
但是我无法使用撤销从用户那里删除或撤销此标志。我想我正在与语法作斗争。是否有适当的方法使用“撤销”命令将其删除,而不撤销整个权限?
MySQL 5.5 手册、这个站点和互联网并没有帮助我找到合适的反方式。
此 SQL 语句将起作用。
UPDATE mysql.user SET ssl_type = '' WHERE ssl_type = 'any' ; FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
但我相信哪里GRANT REQUIRE SSL
有我必须的REVOKE REQUIRE SSL
,不是吗?
尝试启用加密时出错:
[ERROR] SSL error: Unable to get private key from '/etc/mysql/ssl/nginx.key'
[Warning] Failed to set up SSL because of the following SSL library error: Unable to get private key
Run Code Online (Sandbox Code Playgroud)
/etc/mysql/conf.d/encrypt.cnf:
[mysqld]
ssl-ca=/etc/mysql/ssl/nginx.ca
ssl-cert=/etc/mysql/ssl/nginx.crt
ssl-key=/etc/mysql/ssl/nginx.key
Run Code Online (Sandbox Code Playgroud)
密钥是这样生成的:
openssl req -newkey rsa:4096 -nodes -keyout nginx.key -subj "/C=US/ST=California/L=Sacramento/O=MyOrg/OU=MyDev/CN=MyApp"
Run Code Online (Sandbox Code Playgroud)
openssl 检查得很好。
我尝试更改权限、所有者、文件名、移动到不同的目录、禁用 SELinux(它已经被禁用)、查看 AppArmor 日志(它不会阻止它)、将“BEGIN/END PRIVATE KEY”更改为“BEGIN” /END RSA 私钥'。
它出什么问题了?
ssl ×10
mysql ×4
sql-server ×4
encryption ×3
connectivity ×1
mysql-5.5 ×1
permissions ×1
postgresql ×1
replication ×1
security ×1
ubuntu ×1