web-dev-qa-db-ja.com

AWS MySQLエラー2026(HY000):SSL接続エラー:

OSX ElCaptainのターミナルでAWSRDS MySQLインスタンスに接続しようとしていますが、次のエラーが発生し続けます。

ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

これはOSXの新規インストールであり、brewを使用してopensslと一緒にmysqlをインストールしました。ローカルサーバーに接続できます。また、MySQLワークベンチは完全に正常に機能しているようです。

私のUbuntuマシンは、ターミナルを介してRDSインスタンスにも正常に接続します。

3
leakybytes

--skip-ssl(またはMySQL8.0の場合は--ssl-mode = DISABLED)はその問題を解決せず、バイパスするだけです。

このエラーは、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の要件に従って、適切なキーと証明書を生成する必要があります。特に、異なる必要がある共通名の値については、次のようにする必要があります。 https://dev.mysql.com/doc/refman/8.0/en/creating-ssl-files -using-openssl.html

これらの証明書を生成する方法は次のとおりですが、最善ではないかもしれませんが、 Activ'Cloud support:によると機能します。

サーバ側 :

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

0
Julien