使用ODBC(5.1)与SSL的MySQL连接

问题描述:

我们有一个客户端应用程序,它通过ODBC连接器(服务器是一个托管的*专用Web服务器)连接到我们的在线MySQL数据库(5.1.44-community-log)。这工作非常好。但是我无法使用SSL来使它工作。这是我迄今所做的:使用ODBC(5.1)与SSL的MySQL连接

1. MySQL服务器

我已经得到了服务器管理器*设置MySQL使用SSL,这是 '被证明':

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.与MySQL需要用户[SSL | X509]

我和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 机器(所以这不是什么问题)。

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

Connection to MySQL server without using SSL

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

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

Connection to MySQL server using SSL

正如你可以看到它导致错误HY000。打开跟踪(在ODBC配置中)也显示此错误。

任何人都可以告诉我如何使这项工作?即使你只知道解决方案的一部分?

+0

在这两个屏幕上使用相同的端口。这个可以吗?你可以在服务器端做什么?有没有日志? – 2011-05-05 08:25:52

+0

这两个问题都非常好!谢谢,我会尽快查找并报告。谢谢! – 2011-05-05 10:06:30

+0

谢谢Michal回答。 – 2011-05-06 14:39:31

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

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

请注意:

  1. 的端口仍然是相同的(对我来说)。
  2. 日志 - 正如Michal Niklas所建议的 - 没有显示任何有用的信息。
  3. 我已经开始使用'压缩'来改善性能。

我使用Ubuntu 12.04 LTS与MySQL 版本5.5.22-0ubuntu1用于在x86_64 Debian的Linux-GNU((Ubuntu的))和OpenSSL OpenSSL的1.0.1 14 2012年3月

我根据教程创建了证书 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也马上工作! 如上所述,您只需设置客户端密钥,客户端证书和ca-cert!