使用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):
所以连接能够建立,现在尝试使用SSL。
这是这样配置的,就像我在MySQL.com上读过的一样。所以我不是100%确定选项设置是正确的。
正如你可以看到它导致错误HY000。打开跟踪(在ODBC配置中)也显示此错误。
任何人都可以告诉我如何使这项工作?即使你只知道解决方案的一部分?
我解决了这个问题。因为我一次尝试了几件事情,所以我不知道做了什么:
- 我已经让服务器管理员重新创建了证书:我买了一些但我发现那些不可能是用于对连接进行SSL加密。所以现在我正在使用OpenSSL证书。我已经让他们用重新创建证书4)创建您的客户....服务器。它们必须是唯一的。(as mentioned here)。
- 我猜测'验证SSL证书'复选框只适用于您购买证书和第三方服务应检查证书的有效性。取消选中该框!
- 只有填写以下字段:
- 'SSL密钥'(C:\ path_to \客户key.pem)
- 'SSL证书'(C:\ path_to \客户cert.pem)
- 'SSL证书颁发机构'(C:\ path_to \ CA-cert.pem)
请注意:
- 的端口仍然是相同的(对我来说)。
- 日志 - 正如Michal Niklas所建议的 - 没有显示任何有用的信息。
- 我已经开始使用'压缩'来改善性能。
我使用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!
在这两个屏幕上使用相同的端口。这个可以吗?你可以在服务器端做什么?有没有日志? – 2011-05-05 08:25:52
这两个问题都非常好!谢谢,我会尽快查找并报告。谢谢! – 2011-05-05 10:06:30
谢谢Michal回答。 – 2011-05-06 14:39:31