Я пытаюсь подключиться к своему экземпляру AWS RDS MySQL с терминалом на OSX El Captain, но продолжаю получать эту ошибку:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)
Это свежая установка OSX, и я использовал brew для установки mysql вместе с openssl, я могу подключиться к локальному серверу. Также кажется, что верстак MySQL работает отлично.
Моя машина Ubuntu также подключается к экземпляру RDS через терминал.
У меня была такая же проблема, и я понял это! brew
скорее всего, установлен mysql 5.7, который, насколько я могу судить, требует ssl, если иное не указано в --skip-ssl
. Вы можете удалить mysql, запустив brew uninstall mysql
а затем установите 5.5, запустив brew install https://raw.githubusercontent.com/Homebrew/homebrew-versions/master/mysql55.rb && brew link homebrew/versions/mysql55 --force
.
Конечно, это не решает проблему исправления исходной ошибки, но я не нашел никакой документации о том, почему 5.7 отличается от 5.5 таким образом прямо из коробки. Удачи тебе!
Редактировать: Ага! Вот документация:
--ssl
Для сервера MySQL этот параметр указывает, что сервер разрешает, но не требует соединений SSL. Эта опция включена на стороне сервера по умолчанию, начиная с MySQL 5.7.5., и отключен до 5.7.5. Также, начиная с MySQL 5.7.5, серверы MySQL, скомпилированные с использованием OpenSSL, могут автоматически генерировать отсутствующие файлы SSL при запуске. См. Раздел 6.3.13.1, «Создание сертификатов и ключей SSL и RSA с использованием MySQL».
Изменить 2:
Другой вариант, вместо перехода на версию 5.5, вы можете открыть (или создать) /etc/my.cnf
или /etc/mysql/my.cnf
и добавьте следующее с вашим существующим mysql> 5.7.5:
[client]
ssl=0
Это отключит ssl для клиентских подключений и будет вести себя как mysql
<5.7.5.
--skip-ssl (или --ssl-mode = DISABLED для MySQL 8.0) не решает эту проблему, а только обходит ее.
Ошибка возникает, когда при подтверждении SSL возникла ошибка, MySQL не содержит подробностей об этом, и это открытая ошибка: https://bugs.mysql.com/bug.php?id=75311
Вы должны сначала проверить свои сертификаты:
openssl verify -CAfile /etc/mysql/newcerts/ca-cert.pem /etc/mysql/newcerts/server-cert.pem /etc/mysql/newcerts/client-cert.pem
Затем вы должны следовать требованиям MySQL для создания правильных ключей и сертификатов, особенно в отношении значений Common Name, которые должны отличаться: https://dev.mysql.com/doc/refman/8.0/en/creating-ssl-files-using-openssl.html
Вот способ сгенерировать эти сертификаты, возможно, не лучший, но он работает, согласно Activ'Cloud служба поддержки :
На стороне сервера:
openssl genrsa 2048 > /tmp/cert/mysqld-ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key /tmp/cert/mysqld-ca-key.pem -subj "/C=FR/ST=/L=/O=mysqld/CN=mysqld-CA" > /tmp/cert/mysqld-ca-cert.pem
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout /tmp/cert/mysqld-server-key.pem -subj "/C=FR/ST=/L=/O=mysqld/CN=mysqld-server" > /tmp/cert/mysqld-server-req.pem
openssl rsa -in /tmp/cert/mysqld-server-key.pem -out /tmp/cert/mysqld-server-key.pem
openssl x509 -sha1 -req -in /tmp/cert/mysqld-server-req.pem -days 3650 -CA /tmp/cert/mysqld-ca-cert.pem -CAkey /tmp/cert/mysqld-ca-key.pem -set_serial 01 > /tmp/cert/mysqld-server-cert.pem
Сторона клиента :
openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout /tmp/client-cert/mysql-client-key.pem > /tmp/client-cert/mysql-client-req.pem -subj "/C=FR/ST=/L=/O=mysql-client/CN=mysql-client"
openssl rsa -in /tmp/client-cert/mysql-client-key.pem -out /tmp/client-cert/mysql-client-key.pem
openssl x509 -sha1 -req -in /tmp/client-cert/mysql-client-req.pem -days 3650 -CA /tmp/cert/mysqld-ca-cert.pem -CAkey /tmp/cert/mysqld-ca-key.pem -set_serial 01 > /tmp/client-cert/mysql-client-cert.pem
Затем скопируйте файлы, созданные для клиентской и серверной сторон, в нужные каталоги.
Наконец, вы можете попробовать принудительно настроить свой шифрованный список: https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html#statvar_Ssl_cipher_list