MySQL 5.1 リファレンスマニュアル :: 4 データベース管理 :: 4.8 MySQL ユーザ アカウント管理 :: 4.8.7 接続安全 :: 4.8.7.2 SSL接続
« 4.8.7.1 SSL の基本概念

4.8.7.3 SSL コマンド オプション »
Section Navigation      [Toggle]
  • 4.8.7 接続安全
  • 4.8.7.1 SSL の基本概念
  • 4.8.7.2 SSL接続
  • 4.8.7.3 SSL コマンド オプション
  • 4.8.7.4 SSL 証明のセットアップ
  • 4.8.7.5 SSH で Windows からリモート接続

4.8.7.2. SSL接続

MySQL サーバとクライアント プログラムの間で SSL 接続を行うには、まずシステムが OpenSSL または yaSSL のいずれかに対応しているか、そして、使用中の MySQL バージョンが SSL に対応しているかどうかを確認してください。

MySQL は、セキュリティを確保した接続を簡単に行うために、yaSSL とのバンドルになっています。(MySQL と yaSSL は同一のライセンス モデルを採用、OpenSSL は Apache のライセンス。) yaSSL 対応のプラットフォームには限りがありましたが、現在では、MySQL AB サポートのプラットフォームすべてで利用できます。

MySQL と SSL を扱うときの接続安全を確保するには、次の手順に従います。

  1. SSL 対応の MySQL のバイナリ配布を使用していない環境で、バンドルの yaSSL ライブラリではなくて、OpenSSL を使用するという場合は、まず OpenSSL をインストールする。(MySQL では OpenSSL 0.9.6 でテスト済。) OpenSSL は、http://www.openssl.org からインストールする。

  2. SSL 対応の MySQL のバイナリ配布を使用していない場合、MySQL のソース配布で SSL を使用できるように設定する。MySQL を設定するときは、configure スクリプトを次のように呼び出す。

    shell> ./configure --with-ssl
    

    ここでは、バンドルの yaSSL ライブラリを使用できるようにソース配布を設定している。OpenSSL を使用する場合には、OpenSSL ヘッダ ファイルとライブラリがあるデイレクトリのパスで --with-ssl オプションを指定する。

    shell> ./configure --with-ssl=path
    

    MySQL 5.1.11 より前のバージョンを使用している場合は、適切なオプションを使用して、使用する SSL ライブラリを選択する。

    yaSSL:

    shell> ./configure --with-yassl
    

    OpenSSL:

    shell> ./configure --with-openssl
    

    ノート: Unix 対応の yaSSL では、真の乱数を読み出すために、/dev/urandom または /dev/random のどちらかを用意する。Solaris 2.8 や HP-UX より前のバージョンンでの yaSSL に関する追加情報などは、Bug#13164 を参照のこと。

  3. 権限テーブルのアップグレードに、mysql.user テーブルの SSL 関連カラムを権限テーブルに含めていることを確認する。MySQL 4.0 より古いバージョンの権限テーブルでは、この作業が必要です。アップグレード手順は 項4.5.4. 「mysql_upgrade — MySQL アップグレードのテーブル チェック」 を参照のこと。

  4. SSL 対応でサーバ バイナリをコンパイルしていることを確認するには、--ssl オプションで呼び出す。サーバが SSL 非対応の場合は、エラーが出る。

    shell> mysqld --ssl --help
    060525 14:18:52 [ERROR] mysqld: unknown option '--ssl'
    

    mysqld サーバが SSL 対応していることを確認するには、have_openssl システム変数を調べる。

    mysql> SHOW VARIABLES LIKE 'have_openssl';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | have_openssl  | YES   |
    +---------------+-------+
    

    SSL 接続対応であれば、値は YES。値が DISABLED である場合は、--ssl-xxx オプションで起動すると SSL 対応になるということ (このセクションの後述を参照のこと)。SSL 接続対応であれば、値は YES。

SSL 接続を有効にするには、適切な SSL 関連コマンド オプションを使用します。(項4.8.7.3. 「SSL コマンド オプション」 を参照のこと。)

MySQL サーバを起動して、クライアントが SSL 経由で接続できるようにするには、キーを識別するオプションとサーバの接続確立に必要な証明ファイルを使用します。

shell> mysqld --ssl-ca=cacert.pem \
       --ssl-cert=server-cert.pem \
       --ssl-key=server-key.pem
  • ssl-ca で CA 証明書 を認識する。

  • ssl-cert で、サーバのパブリック キーを認識する。これをクライアントに送信すると、そこにある CA 証明書を認証する。

  • ssl-key がサーバ プライベート キーを認識する。

SSL 対応の MySQL サーバとの接続安全を確立するには、クライアント指定のオプションが、クライアントで使用するユーザ アカウントの SSL 条件に依存します。項12.5.1.3. 「GRANT 構文」 で REQUIRE 節に関する記述を参照してください。

アカウントに特別の SSL 条件がない場合、または REQUIRE SSL オプションを含む GRANT ステートメントでアカウントを作成している場合は、--ssl-ca オプションで、クライアント接続が安全に行えます。

shell> mysql --ssl-ca=cacert.pem

クライアント証明書の指定も必要な場合は、アカウントを REQUIRE X509 オプションを使用して作成します。そのとき、そのクライアントでも適切なクライアント キーと証明ファイルを指定する必要があります。これをしないと、サーバが接続を拒否します。

shell> mysql --ssl-ca=cacert.pem \
       --ssl-cert=client-cert.pem \
       --ssl-key=client-key.pem

これは、サーバに使用するものと同様のオプションであることを示します。ノート: CA 証明書が同じである必要があります。

クライアントで、サーバとの現在の接続で SSL を使用しているかどうかを決定します。ここでは、Ssl_cipher ステータス変数の値をチェックします。SSL を使用していない場合、Ssl_cipher の値は空白です。SSL を使用してる場合、値は空白ではありません。例示のようになります。

mysql> SHOW STATUS LIKE 'Ssl_cipher';
+---------------+--------------------+
| Variable_name | Value              |
+---------------+--------------------+
| Ssl_cipher    | DHE-RSA-AES256-SHA |
+---------------+--------------------+

mysql クライアントでは、STATUS または ★\s★ コマンドを使用して、SSL のラインをチェックします。

mysql> \s
...
SSL:                    Not in use
...

または

mysql> \s
...
SSL:                    Cipher in use is DHE-RSA-AES256-SHA
...

クライアント プログラム内で接続安全を確立するには、mysql_ssl_set() C API 関数を使用して、mysql_real_connect() 関数を呼び出す前に、適切な証明オプションをセットします。(項23.2.3.67. 「mysql_ssl_set()」 を参照のこと。) 接続を確立したら、mysql_get_ssl_cipher() を使用して、SSL が使える状態になっているかどうかを確認します。戻値が NULL ではない場合は、接続が安全であることを示し、SSL 暗号鍵を指します。戻値が NULL である場合は、SSL が使用できていないことを示します。項23.2.3.33. 「mysql_get_ssl_cipher()」 を参照してください。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates