MySQL соединение с использованием ODBC (5.1) с SSL - PullRequest
5 голосов
/ 04 мая 2011

У нас есть клиентское приложение, которое подключается к нашей онлайн-базе данных MySQL (5.1.44-community-log) через соединитель ODBC (сервер является управляемым * выделенным веб-сервером). Это работает очень хорошо. Однако я не могу заставить его работать с использованием SSL. Это то, что я сделал до сих пор:

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 с REQUIRE [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 7 машина (так что это не то, что не так).

И я создал пользовательский DSN, настроив его следующим образом (параметры на вкладках не заданы), который показывает, что он успешно подключается к серверу (но не использует и не запрашивает SSL) (используя некоторого действительного пользователя, который не требует SSL):

Connection to MySQL server without using SSL

Чтобы установить соединение, теперь попробуйте использовать SSL.

Это настроено так, как я читал на MySQL.com. Так что я не на 100% уверен, что установленные параметры верны

Connection to MySQL server using SSL

Как вы видите, это приводит к ошибке HY000 . Включение трассировки (в конфигурации ODBC) также показывает эту ошибку.

Может кто-нибудь дать мне подсказку о том, как сделать эту работу? Даже если вы знаете только часть решения?

Ответы [ 2 ]

3 голосов
/ 10 июня 2012

Я использую Ubuntu 12.04 LTS с MySQL Версия 5.5.22-0ubuntu1 для debian-linux-gnu для x86_64 ((Ubuntu)) и OpenSSL OpenSSL 1.0.1 14 марта 2012 года

Я создал сертификаты после обучения http://www.thomas -krenn.com / де / вики / 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 тоже работала немедленно! Как упоминалось выше, вам просто нужно установить ключ-клиент, сертификат-клиент и сертификат-ка!

3 голосов
/ 06 мая 2011

Я решил проблему. Поскольку я попробовал несколько вещей одновременно, я не знаю, что сделал трюк:

  1. Я заставил менеджера сервера заново создать сертификаты: я купил несколько, но обнаружил, что их нельзя использовать для SSL-шифрования соединения. Так что сейчас я использую сертификаты OpenSSL. Я заставил их заново создать сертификаты с 4) Создайте свой клиент .... сервер. Они должны быть уникальными. (, как упомянуто здесь ).
  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. В журналах, как предложил Михал Никлас, не было никакой полезной информации.
  3. Я включил «Использовать сжатие», которое, как говорят, улучшает производительность.
...