SSL 接続を有効にするには、セクション6.3.10.2「SSL を使用するための MySQL の構成」で説明するように、SSL サポートを使用して MySQL 配布を構築します。さらに、適切な証明書および鍵ファイルを指定するには、適切な SSL 関連のオプションを使用する必要があります。SSL オプションの完全なリストについては、セクション6.3.10.4「SSL コマンドのオプション」を参照してください。
SSL を使用した接続がクライアントに許可されるように MySQL サーバーを起動するには、セキュアな接続を確立する際に、サーバーで使用される証明書および鍵ファイルを識別するオプションを使用します。
--ssl-ca
は、認証局 (CA) 証明書を識別します。--ssl-cert
は、サーバーの公開鍵証明書を識別します。これをクライアントに送信し、それに含まれる CA 証明書と照合して認証できます。--ssl-key
は、サーバーの秘密鍵を識別します。
たとえば、次のようにサーバーを起動します。
shell> mysqld --ssl-ca=ca-cert.pem \
--ssl-cert=server-cert.pem \
--ssl-key=server-key.pem
各オプションには、PEM
形式のファイル名が指定されます。必要な SSL
証明書および鍵ファイルを生成する手順については、セクション6.3.10.5「MySQL での SSL 証明書および鍵の設定」を参照してください。MySQL
ソース配布を持っている場合は、配布の
mysql-test/std_data
ディレクトリで、デモ用の証明書および鍵ファイルを使用して設定をテストすることもできます。
クライアント側でも同様オプションが使用されますが、--ssl-cert
および --ssl-key
は、クライアントの公開鍵と秘密鍵を識別します。認証局の証明書を指定する場合は、サーバーで使用されるときと同じ形式で指定する必要があります。
SSL サポートを使用して MySQL
サーバーへのセキュアな接続を確立するために、クライアントが指定する必要があるオプションは、クライアントで使用される
MySQL アカウントの SSL
要件によって異なります。(セクション13.7.1.4「GRANT 構文」で、REQUIRE
句の説明を参照してください。)
特別な SSL
要件を持っていないアカウント、または
REQUIRE SSL
オプションを含む
GRANT
ステートメントを使用して作成されたアカウントを使用して接続すると仮定します。推奨される
SSL オプションセットとして、少なくとも
--ssl-cert
と
--ssl-key
を付けてサーバーを起動し、--ssl-ca
を使用してクライアントを呼び出します。次のように、クライアントはセキュアに接続できます。
shell> mysql --ssl-ca=ca-cert.pem
クライアント証明書も指定されるように要求するには、REQUIRE
X509
オプションを使用してアカウントを作成します。そのあと、クライアントは適切なクライアント鍵および証明書ファイルを指定する必要があります。そうしない場合、サーバーは接続を拒否します。
shell> mysql --ssl-ca=ca-cert.pem \
--ssl-cert=client-cert.pem \
--ssl-key=client-key.pem
SSL の使用を回避し、その他の SSL
オプションをオーバーライドするには、--ssl=0
またはシノニム
(--skip-ssl
、--disable-ssl
)
を使用してクライアントプログラムを呼び出します。
shell> mysql --ssl=0
クライアントは
Ssl_cipher
ステータス変数の値をチェックすることで、サーバーとの現在の接続で
SSL
が使用されているかどうかを確認できます。SSL
が使用されている場合は、値が空以外になります。それ以外の場合は、空になります。例:
mysql> SHOW STATUS LIKE 'Ssl_cipher';
+---------------+--------------------+
| Variable_name | Value |
+---------------+--------------------+
| Ssl_cipher | DHE-RSA-AES256-SHA |
+---------------+--------------------+
mysql
クライアントの場合は、代わりに
STATUS
または \s
コマンドを使用して、SSL
行をチェックすることもできます。
mysql> \s
...
SSL: Cipher in use is DHE-RSA-AES256-SHA
...
または、
mysql> \s
...
SSL: Not in use
...
C API を使用すると、アプリケーションプログラムで SSL を使用できます。
セキュアな接続を確立するには、
mysql_real_connect()
を呼び出す前に、mysql_ssl_set()
C API 関数を使用して、適切な証明書オプションを設定します。セクション23.7.7.68「mysql_ssl_set()」を参照してください。接続が確立されたあとに、SSL が使用中であるかどうかを判断するには、
mysql_get_ssl_cipher()
を使用します。NULL
以外の戻り値は、セキュアな接続であることを示し、暗号化に使用される SSL 暗号の名前を示します。NULL
の戻り値は、SSL が使用されていないことを示します。セクション23.7.7.33「mysql_get_ssl_cipher()」を参照してください。
レプリケーションでは C API が使用されるため、マスターサーバーとスレーブサーバー間でセキュアな接続を使用できます。セクション17.3.7「SSL を使用してレプリケーションをセットアップする」を参照してください。