После перехода с MySQL на более новую установку MariaDB на Debian 9 у меня возникли проблемы с подключениями SSL.
Я создал сертификат CA и установил его как на сервере, так и на клиенте. Затем я создал серверные и клиентские ключи и сертификаты, которые подписал сертификатом CA.
Что работает:
Я могу подключиться от клиента к серверу с клиентом mysql без SSL-соединений.
Я могу проверить сертификат клиента с помощью openssl:
$ openssl verify MariaDB_client.crt
MariaDB_client.crt: OK
Я понимаю, что MariaDB использует yaSSL, но я думаю, что это все еще показывает, что сертификаты и CA верны.
На сервере у меня есть:
MariaDB> show global variables like '%ssl%';
+---------------------+--------------------------------------+
| Variable_name | Value |
+---------------------+--------------------------------------+
| have_openssl | NO |
| have_ssl | YES |
| ssl_ca | /etc/mysql/conf.d/MariaDB_ca.crt |
| ssl_capath | |
| ssl_cert | /etc/mysql/conf.d/MariaDB_server.crt |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | /etc/mysql/conf.d/MariaDB_server.key |
| version_ssl_library | YaSSL 2.4.4 |
+---------------------+--------------------------------------+
Что значит не работай:
Если я добавлю файл .my.cnf со следующим содержимым в каталог $ HOME пользователя ...
[client]
ssl-ca=/--path--/MariaDB_ca.crt
ssl-cert=/--path--/MariaDB_client.crt
ssl-key=/--path--/MariaDB_client.key
... соединение не работает:
ERROR 2026 (HY000): SSL connection error: unable to verify peer checksum
В журнале сервера я нахожу (не уверен, связано ли это):
[Warning] IP address 'ip.of.connecting.client' could not be resolved: Name or service not known
Мои вопросы:
Как я могу сузить / отладить эту проблему с подключением?
Я обнаружил противоречивую информацию о том, следует ли использовать один или другой CN для сертификатов сервера и клиента. В настоящее время использую тот же CN.
Требуются ли для сертификатов особые права доступа?
После многих часов попыток все наконец заработало.
Решающим шагом было использовать IP-адрес сервера как общее имя (CN) в сертификате сервера (на самом деле подписанный csr затем дает сертификат), а не произвольное имя хоста, как предлагают некоторые инструкции. Многие источники, которые я нашел, противоречили в этом отношении.
Я использую MariaDB, поставляемую с Debian 9, связанную с библиотекой yaSSL. Может быть, с openssl все по-другому. Они определенно отличаются от MySQL.