【问题标题】:MySQL connection using ODBC (5.1) with SSL使用带有 SSL 的 ODBC (5.1) 的 MySQL 连接
【发布时间】:2011-05-04 08:17:13
【问题描述】:

我们有一个客户端应用程序,它通过 ODBC 连接器连接到我们的在线 MySQL 数据库 (5.1.44-community-log)(服务器是托管的*专用网络服务器)。这很好用。但是我无法使用 SSL 让它工作。这是我到目前为止所做的:

1. MySQL 服务器

我已经让服务器管理器*使用 SSL 设置 MySQL,这是“证明”:

mysql> SHOW VARIABLES LIKE '%ssl%';

结果是这样的响应:

+---------------+---------------------------------+
| Variable_name | Value                           |
+---------------+---------------------------------+
| have_openssl  | YES                             |
| have_ssl      | YES                             |
| ssl_ca        | /***/mysql-cert/ca-cert.pem     |
| ssl_capath    |                                 |
| ssl_cert      | /***/mysql-cert/server-cert.pem |
| ssl_cipher    |                                 |
| ssl_key       | /***/mysql-cert/server-key.pem  |
+---------------+---------------------------------+

问题:服务器配置正确吗?我猜是……

2。证书

我已经购买了真正的证书(通过我的服务器管理员)。这些在上面显示的目录中。我还从该目录下载了 client-cert.pem、client-key.pem 和 ca-cert.pem。

3.具有 REQUIRE [SSL|X509]

的 MySQL 用户

我创建了一个新用户,然后通过 SSL 授予它从任何位置(用于测试)的访问权限:

GRANT USAGE ON *.* TO 'somevaliduser'@'%' IDENTIFIED BY PASSWORD 'somevalidpass' REQUIRE X509 

4. ODBC 客户端

我已经(刚刚下载并)安装了:mysql-connector-odbc-5.1.8-winx64.msi(64 位),因为我的机器是 64 位 Windows 7 机器(所以这不是问题所在)。

我已经创建了一个用户 DSN 像这样配置它(选项卡上没有设置选项),它显示它成功连接到服务器(但是没有使用 - 也没有请求这样做 - SSL)(使用一些有效的用户不需要 SSL):

所以连接能够建立,现在尝试使用 SSL。

这是这样配置的,就像我在 MySQL.com 上读到的一样。所以我不是 100% 确定选项集是正确的。

如您所见,它会导致错误HY000。打开跟踪(在 ODBC 配置中)也会显示此错误。

谁能给我一个关于如何完成这项工作的提示?即使您只知道解决方案的一部分?

【问题讨论】:

  • 在两个屏幕上,您使用的是同一个端口。这个可以吗?你能在服务器端找到什么?有日志吗?
  • 这两个问题都非常好!谢谢,我会尽快调查并报告。谢谢!
  • 感谢 Michal 的回答。
  • 这可要了我的命。谢谢您的确认。 openssl 1.0.1 似乎有一些问题

标签: mysql ssl odbc ssl-certificate mysql-management


【解决方案1】:

我解决了这个问题。因为我一次尝试了几件事,所以我不知道有什么诀窍:

  1. 我已让服务器管理器重新创建证书:我购买了一些证书,但我发现这些证书不能用于对连接进行 SSL 加密。所以现在我使用的是 OpenSSL 证书。我已经让他们用 4) 创建您的客户端 .... 服务器重新创建证书。它们必须是唯一的。 (as mentioned here) 请记住。
  2. 我猜“验证 SSL 证书”复选框仅适用于您购买证书并且第三方服务应检查证书的有效性。取消选中该框!
  3. 仅填写以下字段:
    • “SSL 密钥”(c:\path_to\client-key.pem)
    • “SSL 证书”(c:\path_to\client-cert.pem)
    • “SSL 证书颁发机构”(c:\path_to\ca-cert.pem)

请注意:

  1. 端口还是一样的(对我来说)。
  2. 按照 Michal Niklas 的建议,日志没有显示任何有用的信息。
  3. 我已启用“使用压缩”,据说可以提高性能。

【讨论】:

  • “我猜“验证 SSL 证书”复选框仅适用于您购买证书并且第三方服务应检查证书的有效性。取消选中该框!” - 这是非常危险的建议。除非您对其进行某种 类的验证,否则使用服务器证书是没有意义的。通过将 CA 路径指向一个空文件来测试您是否完全禁用了验证,或者是否正在发生更深奥的事情,这将是微不足道的。如果您仍然可以连接,那么您不应该取消选中该框 - 您应该已修复错误。
【解决方案2】:

我正在使用带有 MySQL 的 Ubuntu 12.04 LTS 版本 5.5.22-0ubuntu1 适用于 x86_64 ((Ubuntu)) 和 OpenSSL 上的 debian-linux-gnu OpenSSL 1.0.1 2012 年 3 月 14 日

我按照教程创建了证书 http://www.thomas-krenn.com/de/wiki/MySQL_Verbindungen_mit_SSL_verschl%C3%BCsseln (教程是德语的,但这在这里并不重要)。

尝试连接时

mysql -u root -p --ssl-ca=/etc/mysql/ca-cert.pem --ssl-cert=/etc/mysql/client-cert.pem --ssl-key=/etc/mysql/client-key.pem  --protocol=tcp

我总是收到错误消息SSL 连接错误:协议版本不匹配

这将我带到该网站 http://bugs.mysql.com/bug.php?id=64870 这证实(对我而言)存在错误。

长话短说。最后,我使用我的 MacOS X Lion 创建了所有证书,将证书复制到服务器和客户端,它立即工作!

当我让 Linux 端工作时,Windows 也立即工作了! 如上所述,您只需要设置client-key,client-cert和ca-cert!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多