После создания самозаверяющего SSL-сертификата я настроил свой удаленный сервер MySQL для их использования (и SSL включен)
Я захожу по ssh на свой удаленный сервер и пытаюсь подключиться к его собственному mysqld с помощью SSL (MySQL server - 5.5.25).
mysql -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
Хорошо, я помню, что читал некоторые проблемы с подключением к тому же серверу через SSL. Поэтому я загружаю клиентские ключи в свою локальную коробку и тестирую оттуда ...
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key --ssl-ca=ca.cert
Enter password:
ERROR 2026 (HY000): SSL connection error
Непонятно, к чему относится ошибка «Ошибка соединения SSL», но если я ее опущу -ssl-ca
, я смогу подключиться с использованием SSL.
mysql -h <server> -u <user> -p --ssl=1 --ssl-cert=client.cert --ssl-key=client.key
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.25 MySQL Community Server (GPL)
Тем не менее, я считаю, что это только шифрование соединения, а не проверка подлинности сертификата (это означает, что я буду потенциально уязвим к атаке «человек посередине»)
Сертификаты SSL действительны (хотя и самозаверяющие) и не имеют парольной фразы. Итак, мой вопрос, что я делаю не так? Как я могу подключиться через SSL, используя самозаверяющий сертификат?
Версия MySQL Server - 5.5.25, а сервер и клиенты - CentOS 5.
Спасибо за любой совет
Изменить : Обратите внимание, что во всех случаях команда запускается из того же каталога, в котором находятся ключи ssl (следовательно, без абсолютного пути)
Изменить (в ответ на mgorven): ca.cert
это сертификат центра сертификации, который должен сообщать mysql, что моему центру
сертификации доверяют.
Конфиг из my.cnf
есть
[mysqld]
ssl-ca=/etc/ssl/mysql/ca.cert
ssl-cert=/etc/ssl/mysql/server.cert
ssl-key=/etc/ssl/mysql/server.key
Я также попытался добавить, ssl-cipher=DHE-RSA-AES256-SHA
но с тех пор удалил это, поскольку это не помогло.
ca.cert
? Это самозаверяющий сертификат сервера? Вы используете клиентские сертификаты для аутентификации? Пожалуйста, предоставьте конфигурацию, связанную с SSL, на сервере.Ответы:
Да, вы правы, если вы не укажете,
--ssl-ca
то клиент вообще не проверяет сертификат сервера. Поскольку он работает без этой опции, наиболее вероятной причиной сбоя является то, что клиент не доверяет сертификату сервера.Если вы используете самозаверяющие клиентские и серверные сертификаты, тогда
ca.cert
файл должен включать оба этих файла. Таким образом, клиент будет доверять сертификату сервера, а сервер будет доверять сертификату клиента.Например:
сгенерируйте ключ сервера и сертификат:
Сгенерируйте клиентский ключ и сертификат:
Объедините сертификаты клиента и сервера в файл сертификатов CA:
источник
Чтобы использовать один способ ssl, вы должны попробовать:
The
--ssl-cert
и--ssl-key
на клиенте mysql используются для двухстороннего SSL. Это означает аутентификацию на основе сертификатов. Предметом сертификата клиента должно быть имя пользователя.источник
--ssl-verify-server-cert
CN сертификата сервера он должен совпадать с хостом, указанным для параметра командной строки -h.Случайно, вы не ввели одно и то же общее имя для сертификатов сервера и клиента? Если да, замените одно из них, чтобы общие имена были другими.
источник