私はPercona MySQL 5.7(5.7.21-20-log)をインストールしましたapt-get
。ルートアカウントを使用して接続し、SSLステータスを確認すると、
# mysql --ssl
mysql> show variables like '%ssl%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | ca.pem |
| ssl_capath | |
| ssl_cert | server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | server-key.pem |
+---------------+-----------------+
mysql> status
--------------
mysql Ver 14.14 Distrib 5.7.21-20, for debian-linux-gnu (x86_64) using 6.3
Connection id: 31
Current database:
Current user: root@localhost
SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
デフォルトではSSLが使用されています。ただし、完全なコマンドを使用すると
mysql -h 127.0.0.1 -P 3306 -u root -p --ssl-ca=/var/lib/mysql/ca.pem --ssl-cert=/var/lib/mysql/server-cert.pem --ssl-key=/var/lib/mysql/server-key.pem
エラーが返される
ERROR 2026 (HY000): SSL connection error: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
答え1
問題は、クライアント側でサーバー証明書とキーを使用していることです。
--ssl-cert=/var/lib/mysql/server-cert.pem --ssl-key=/var/lib/mysql/server-key.pem
文書に記載されているように6.4.2 暗号化接続のコマンドオプション(強調は私によるものです):
--ssl-cert=file_name
PEM 形式の SSL 公開鍵証明書ファイルのパス名。クライアント側では、これはクライアント公開鍵証明書ですサーバー側では、これはサーバーの公開鍵証明書です。サーバー側では、このオプションは を意味します
--ssl
。--ssl-key=file_name
PEM形式のSSL秘密鍵ファイルのパス名。クライアント側では、これはクライアントの秘密鍵サーバー側では、これはサーバーの秘密鍵です。サーバー側では、このオプションは を意味します
--ssl
。
のみを使用して TLS 接続を強制することができます--ssl
:
mysql -h 127.0.0.1 -P 3306 -u root -p --ssl
ここで役立つのは かもしれません--ssl-cipher=cipher_list
。これを使用すると、サーバー構成で許可されている場合でも、接続で不要な暗号が使用されていないことを確認できます。ただし、両方を制御する権限がある場合は、主にサーバー側でこれを構成する必要があります。