Проверьте подлинность хоста на ведомом устройстве репликации с помощью самозаверяющих сертификатов - PullRequest
0 голосов
/ 08 ноября 2018

MySQL 5.7 Ubuntu 16.04 на AWS EC2

У меня настроена репликация по ssl с использованием самозаверяющих сертификатов.Я могу подключиться к мастеру от ведомого устройства с помощью клиента mysql с ssl-mode = VERIFY_IDENTITY.Репликация также работает над ssl, пока я не попытаюсь включить MASTER_SSL_VERIFY_SERVER_CERT, чтобы включить проверку имени хоста.

Если этот параметр включен, ведомое устройство больше не может проходить проверку подлинности с ведущим устройством и получило ошибку Io 2026, которая является просто ошибкой общего ssl-соединения.Журналы больше не являются полезными, также как и ssldump, который просто показывает, что соединение прерывается до того, как рукопожатие даже начинается.

Согласно документации:

Чтобы активировать проверку личности имени хоста,добавьте параметр MASTER_SSL_VERIFY_SERVER_CERT.

и

Для подключения к репликации указание MASTER_SSL_VERIFY_SERVER_CERT = 1 соответствует настройке --ssl-mode = VERIFY_IDENTITY

* 10171018 * Но также

Проверка подлинности имени хоста не работает с самозаверяющими сертификатами.

https://dev.mysql.com/doc/refman/5.7/en/replication-solutions-encrypted-connections.html

Так как я могу включить хостпроверка имени при репликации с помощью самозаверяющих сертификатов?Документы, кажется, указывают, что это невозможно, но тогда почему я могу подключиться через клиент с помощью ssl-mode = VERIFY_IDENTITY?

Спасибо.

1 Ответ

0 голосов
/ 10 ноября 2018

Решением было добавить MASTER_SSL_CA, MASTER_SSL_CERT и MASTER_SSL_KEY в мой оператор CHANGE MASTER TO, чтобы вручную указывать на ca, cert и key, а скорее на доверяющий mysql для чтения их из конфигурации.

Насколько я могу судить, это означает, что документы mysql неверны.

Они утверждают, что пути могут быть установлены в разделе [client] my.cnf, но это явно не так, по крайней мере для меня. По какой-то причине секция [client], похоже, используется клиентом mysql, но игнорируется для репликации.

Полагаю, я также неправильно понял самозаверяющие сертификаты. MASTER_SSL_VERIFY_SERVER_CERT работает, потому что на самом деле у меня нет самозаверяющих сертификатов, у меня есть сертификаты, подписанные моим собственным CA. Сам сертификат CA является самоподписанным, но он отличается от того, что сертификаты master / slave являются самоподписанными.

И, наконец, я совершенно не понял цели MASTER_SSL_VERIFY_SERVER_CERT. Оказывается, мне это вообще не нужно, потому что мой личный центр сертификации подписывает только сертификаты для этого одного домена, так что нечего получить, проверив, что общее имя сертификата сервера соответствует запрошенному домену. Так будет всегда. Проверка будет полезна только при использовании доверенного центра сертификации, который подписывает сертификаты для многих доменов. Затем вы захотите убедиться, что сертификат принадлежит домену, который вы запрашивали, в противном случае вы будете уязвимы для атак типа «человек посередине».

Надеюсь, этот информационный беспорядок поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...