SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.08.2010 11:41:29

rain82
Участник
Зарегистрирован: 27.08.2010
Сообщений: 7

Настройка подключения через SSL на Windows

Привет. Обращаюсь с вопросом об установке шифрованного подключения по SSL к серверу MySQL. Прочитал немного информации на эту тему и действовал по имеющимся инструкциям, но создать такое подключение не удалось. Здесь есть только одна тема посвященная этому http://sqlinfo.ru/forum/viewtopic.php?id=1901 но в ней недостаточно информации для решения проблемы. Для Windows примера успешного создания такого подключения вообще не нашел. Надеюсь на вашу помощь.

Сразу извиняюсь за лишние подробности, но не хочу ничего опускать в описании процесса.


Используемое ПО:

Операционка : Windows Server 2003
Сервер MySQL : версия 5.5.5-m3
Генератор сертификатов : OpenSSL for Windows

OpenSSL for Windows скачан по ссылке http://www.openssl.org/related/binaries.html



=========================================

Этап 1: Проверка поддержки SSL сервером MySQL

Согласно инструкциям ttp://dev.mysql.com/doc/refman/5.0/en/secure-using-ssl.html , проверяю поддерживает ли MySQL сервер SSL соединения.
> mysqld --ssl --help

Сообщения "[ERROR] mysqld: unknown option '--ssl'"  НЕ появляется, значит SSL поддерживается. После подключения к серверу MySQL проверяю значение системной переменной  "have_ssl" . Значение равно "DISABLED". Значит сервер поддерживает SSL, но был запущен без необходимых опций --ssl-xxx.

Согласно инструкции с той же страницы для того чтобы переменная "have_ssl" при запуске имела значение "YES" необходимо при старте сервера MySQL указать эти ключи так:

> mysqld  --ssl-ca=ca-cert.pem  --ssl-cert=server-cert.pem  --ssl-key=server-key.pem


Установливаю OpenSSL for Windows и добавляю путь к каталогу bin в переменную PATH операционки
Далее действую по инструкции со страницы http://dev.mysql.com/doc/refman/5.0/en/ … certs.html

Создаю каталог c:\cert и устанавливаю его как текущий


=========================================

Этап 2: Создание сертификатов CA


ПЕРВАЯ КОМАНДА:
--------------
> openssl genrsa 2048 > ca-key.pem

Создается файл ca-key.pem, на экран выводится следующий текст, сообщающий о том что приватный RSA ключ создан:
Loading 'screen' into random state - done
Generating RSA private key, 2048 bit long modulus
.............................+++
............+++
e is 65537 (0x10001)



ВТОРАЯ КОМАНДА:
---------------
> openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pem


Тут на эран выводится информация.
Loading 'screen' into random state - done
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----

И далее предложение ввести код страны (ставлю RU). Области (ставлю State) . Города (ставлю City). Имя организации (ставлю HomeCA). Подразделения организации (ставлю Unit). Общее имя (ставлю NameCA). Адрес почты (ставлю ca@mail.ru). Итого ввод данных выглядит так:


Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:State
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:HomeCA
Organizational Unit Name (eg, section) []:Unit
Common Name (eg, YOUR name) []:NameCA
Email Address []:ca@mail.ru



ЗДЕСЬ ХОЧУ УТОЧНИТЬ. В первом комментарии на странице http://dev.mysql.com/doc/refman/5.0/en/ … certs.html сказано что "4) Create your client key. Make sure your commonName is *different* from that of your server. They must be unique."

Почему эти имена должны различаться мне не понятно. Но если есть совет сделать их различными - сделаем их разными для клиента, сервера и CA.




=========================================

Этап 3: Создание сертификатов сервера


ПЕРВАЯ КОМАНДА:
--------------
> openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem

На экран выводится информация подобная той что выводилась после второй команды при создании сертификатов CA.
Затем снова просят задать даные для сертефиката. Задаю те же данные, что и в прошлый раз за исключением имени огранизации, почты и общего имени.

Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:State
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:HomeServer
Organizational Unit Name (eg, section) []:Unit
Common Name (eg, YOUR name) []:NameServer
Email Address []:server@mail.ru


ДАЛЕЕ ПРОСЯТ ВВЕСТИ ПАРОЛЬ. ЧЕТКИХ ИНСТРУКЦИЙ О ТОМ КАКИМ ОН ДОЛЖЕН БЫТЬ И ГДЕ ЕГО ПОТОМ СПРАШИВАЮТ НЕ НАШЕЛ.
Задаю пароль "passowrd":

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:password
An optional company name []:optional company name



ВТОРАЯ КОМАНДА:
---------------
> openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

Вывод команды следующий:
Loading 'screen' into random state - done
Signature ok
subject=/C=RU/ST=State/L=City/O=HomeServer/OU=Unit/CN=NameServer/emailAddress=server@mail.ru
Getting CA Private Key



В результате имеем файлы: server-req.pem,  server-key.pem,  server-cert.pem




=========================================

Этап 4: Создание сертификатов клиента


ПЕРВАЯ КОМАНДА:
--------------

> openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem

Снова просят ввести данные. Общее имя указываю отличное от общего имени сервера, а именно NameClient. Пароль указывают тот же, что и при создании сертификатов сервера, то есть password:

Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:State
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:HomeClient
Organizational Unit Name (eg, section) []:Unit
Common Name (eg, YOUR name) []:NameClient
Email Address []:client@mail.ru

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:passowrd
An optional company name []:optional company name


ВТОРАЯ КОМАНДА:
---------------

> openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

Вывод команды следующий:
Loading 'screen' into random state - done
Signature ok
subject=/C=RU/ST=State/L=City/O=HomeClient/OU=Unit/CN=NameClient/emailAddress=client@mail.ru
Getting CA Private Key

В результате выполнения команд создаются файлы client-req.pem,  client-key.pem,  client-cert.pem






=========================================

Этап 5: Подключение созанных сертификатов к MySQL серверу


Использую информацию из комментария по всё той же ссыке:

In order to run MySQL as Service on Windows platform with SSL enabled just add this lines in [mysqld] section:
ssl-key=C:/cert/server-key.pem
ssl-cert=C:/cert/server-cert.pem
ssl-ca=C:/cert/ca-cert.pem

Останавливаю сервер
C:\cert>net stop mysql
The MySQL service is stopping..
The MySQL service was stopped successfully.

Открываю mysql.ini  и добаляю в секцию [mysqld] строки

ssl-key=C:/cert/server-key.pem
ssl-cert=C:/cert/server-cert.pem
ssl-ca=C:/cert/ca-cert.pem

Заново запускаю сервер MySQL любой из команд "net start mysql"  или просто "mysqld" - результат один и тот  же.

Переменная have_ssl  по прежнему равна DISABLED.




============================================

Итоги:


На сколько я понимаю пока переменная have_ssl не станет равна YES что-то еще делать нет смылса.

Пробовал добавить в mysql.ini строку ssl:

[mysqld]
ssl
ssl-key=C:/cert/server-key.pem
ssl-cert=C:/cert/server-cert.pem
ssl-ca=C:/cert/ca-cert.pem

Это не помогло. Пробовал запускать mysqld с ключами

mysqld --ssl-key=C:/cert/server-key.pem   --ssl-cert=C:/cert/server-cert.pem   --ssl-ca=C:/cert/ca-cert.pem

Переменные всё те же
+---------------+-------------------------+
| Variable_name | Value                   |
+---------------+-------------------------+
| have_openssl  | DISABLED                |
| have_ssl      | DISABLED                |
| ssl_ca        | C:/cert/ca-cert.pem     |
| ssl_capath    |                         |
| ssl_cert      | C:/cert/server-cert.pem |
| ssl_cipher    |                         |
| ssl_key       | C:/cert/server-key.pem  |
+---------------+-------------------------+

Пробовал менять слеши на обратные и брать пути к сертификатам в кавычки - не помогло. Результат тот же.

Задавал пустой пароль при создании сертификатов клиента и сервера - не помогло. В любом случае пароль здесь скорее всего не влияет на переменные have_openssl и have_ssl.

Неактивен

 

#2 27.08.2010 13:34:06

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Настройка подключения через SSL на Windows

Пароль безусловно влияет, т.к. серверу нужно проверить, что ключ
подходит к сертификату. А для чтения ключа нужен пароль.

А что написно в журнале ошибок MySQL? Там пишутся строки при
неудачной инициализации SSL.

Неактивен

 

#3 27.08.2010 14:22:31

rain82
Участник
Зарегистрирован: 27.08.2010
Сообщений: 7

Re: Настройка подключения через SSL на Windows

Действительно, вот все строки касающиеся SSL из лога:

SSL error: Unable to get private key from 'C:/cert/server-key.pem'
100827 19:12:49 [Warning] Failed to setup SSL
100827 19:12:49 [Warning] SSL error: Unable to get private key
100827 19:12:53 [Note] Event Scheduler: Loaded 3 events
100827 19:12:53 [Note] mysqld: ready for connections.
Version: '5.5.5-m3'  socket: ''  port: 3306  MySQL Community Server (GPL)


Не удается получить приватный ключ.
Возможно все-таки заданный пароль к этому файлу надо указывать? Но как и где его указывать?


При создании файла server-key.pem я указывал пароль "password" и также пробовал оставлять это поле пустым:

A challenge password []:password
An optional company name []:optional company name

Возможно надо было не осталять его пустым а ставить точку, как это было написано в выводах openssl :  "If you enter '.', the field will be left blank."


Но если пароль уже задан, то как его указать?

Неактивен

 

#4 27.08.2010 14:33:43

rain82
Участник
Зарегистрирован: 27.08.2010
Сообщений: 7

Re: Настройка подключения через SSL на Windows

Повторил действия, но при задании пароля для server-key.pem вместо пароля поставил точку ".".

Вывод ошибок в лог тот же самый.

Неактивен

 

#5 27.08.2010 14:42:16

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Настройка подключения через SSL на Windows

Нее, это не тот пароль. Смотрите пароль на файле с ключом. Если пароля нет
(то, что нужно получить), то он должен начинаться как-то так:
-----BEGIN RSA PRIVATE KEY-----

Если там вписано шифрование (DES, AES, etc), то значит личный ключ находится
под паролем, и тогда надо его расшифровать.

Неактивен

 

#6 27.08.2010 14:55:55

rain82
Участник
Зарегистрирован: 27.08.2010
Сообщений: 7

Re: Настройка подключения через SSL на Windows

Нашел инофрмцию о баге в MySQL которая вроде бы и не бага ))
http://bugs.mysql.com/bug.php?id=48881

Сертефикат для сервера MySQL должен быть без пароля. Попробую разобраться как его снять.

----------------------------------

Снимается пароль командами:

openssl rsa -in server-key.pem -out server-key.pem
и
openssl rsa -in client-key.pem -out client-key.pem

После этого переменные have_ssl и have_openssl становятся равны YES.

Отредактированно rain82 (27.08.2010 15:08:21)

Неактивен

 

#7 27.08.2010 15:01:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Настройка подключения через SSL на Windows

Жаль, что Вы не прочитали мое сообщение wink

Неактивен

 

#8 27.08.2010 15:12:28

rain82
Участник
Зарегистрирован: 27.08.2010
Сообщений: 7

Re: Настройка подключения через SSL на Windows

Теперь прочитал )) Дальше буду разбираться с подключением клиента.

Спасибо за подсказки!


----------------------------------------------------------

Для установки полключения клиента командой
mysql --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -u root -p
также достаточно сбросить пароль выполнив
openssl rsa -in client-key.pem -out client-key.pem

Всё работает, но с OpenSSL конечно надо разбираться - куча тонкостей.

Отредактированно rain82 (27.08.2010 15:26:11)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson