MySQL 5.6 リファレンスマニュアル  /  ...  /  SSL を使用してレプリケーションをセットアップする

17.3.7 SSL を使用してレプリケーションをセットアップする

レプリケーション中に必要なバイナリログの転送を暗号化するために SSL を使用するには、マスターとスレーブの両方が SSL ネットワーク接続をサポートする必要があります。どちらかのホストが SSL 接続をサポートしない場合は (SSL 用にコンパイルまたは構成されていなかったため)、SSL 接続ベースのレプリケーションは実現できません。

SSL 接続を使用するレプリケーションをセットアップすることは、SSL を使用するサーバーとクライアントをセットアップすることに似ています。マスターで使用できる適切なセキュリティー証明書、および各スレーブで同様の証明書 (同じ認証局からの) を取得 (または作成) する必要があります。

サーバーとクライアントを SSL 接続用にセットアップする際の詳細は、セクション6.3.10.2「SSL を使用するための MySQL の構成」を参照してください。

マスター上で SSL を有効にするには、適切な証明書を作成または取得してから、マスターの my.cnf ファイルの [mysqld] セクション内でマスターの構成に次の構成オプションを追加する必要があります。

[mysqld]
ssl-ca=cacert.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem

証明書へのパスは相対でも絶対でもかまいません。この目的のためには完全パスを常に使用することをお勧めします。

オプションは次のとおりです。

  • ssl-ca は認証局 (CA) 証明書を識別します。

  • ssl-cert はサーバー公開鍵を識別します。これをクライアントに送信し、それに含まれる CA 証明書と照合して認証できます。

  • ssl-key はサーバー秘密鍵を識別します。

スレーブでは、SSL 情報を設定するために 2 つのオプションを利用できます。スレーブの my.cnf ファイルの [client] セクションにスレーブ証明書を追加するか、または CHANGE MASTER TO ステートメントを使用して SSL 情報を明示的に指定できます。

  • オプションファイルを使用してスレーブ証明書を追加するには、スレーブの my.cnf ファイルの [client] セクションに次の行を追加します。

    [client]
    ssl-ca=cacert.pem
    ssl-cert=client-cert.pem
    ssl-key=client-key.pem

    スレーブがマスターに接続しないように --skip-slave-start オプションを使用して、スレーブサーバーを再起動します。SSL 接続を有効にする MASTER_SSL オプションを使用して、マスター構成を指定する CHANGE MASTER TO を使用します。

    mysql> CHANGE MASTER TO
        -> MASTER_HOST='master_hostname',
        -> MASTER_USER='replicate',
        -> MASTER_PASSWORD='password',
        -> MASTER_SSL=1;
    
  • CHANGE MASTER TO ステートメントを使用して SSL 証明書のオプション指定するには、SSL オプションを付加します。

    mysql> CHANGE MASTER TO
        -> MASTER_HOST='master_hostname',
        -> MASTER_USER='replicate',
        -> MASTER_PASSWORD='password',
        -> MASTER_SSL=1,
        -> MASTER_SSL_CA = 'ca_file_name',
        -> MASTER_SSL_CAPATH = 'ca_directory_name',
        -> MASTER_SSL_CERT = 'cert_file_name',
        -> MASTER_SSL_KEY = 'key_file_name';
    

マスター情報が更新されたあとに、スレーブレプリケーションプロセスを起動します。

mysql> START SLAVE;

SHOW SLAVE STATUS ステートメントを使用して、SSL 接続が正常に確立されたことを確認できます。

CHANGE MASTER TO ステートメントの詳細については、セクション13.4.2.1「CHANGE MASTER TO 構文」を参照してください。

レプリケーション中に SSL 接続の使用を適用する場合は、REPLICATION SLAVE 権限のユーザーを作成して、そのユーザーに REQUIRE SSL オプションを使用します。例:

mysql> CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
mysql> GRANT REPLICATION SLAVE ON *.*
    -> TO 'repl'@'%.mydomain.com' REQUIRE SSL;

アカウントがすでに存在する場合は、このステートメントでそれに REQUIRE SSL を追加できます。

mysql> GRANT USAGE ON *.*
    -> TO 'repl'@'%.mydomain.com' REQUIRE SSL;

User Comments
  Posted by Sam Critchley on February 7, 2014
Note that the "REQUIRE SSL" grant may not work if your client configuration has all three certificate lines enabled. In that case, you should only specify the certificate authority key:

ssl-ca=cacert.pem

If you want to require a client certificate then the account should have "REQUIRE X509" instead of "REQUIRE SSL" and your client config should look (roughly) like this:

ssl-ca=cacert.pem
ssl-cert=client-cert.pem
ssl-key=client-key.pem

You can show which cipher is in use in the client simply by typing "\s":

username@hostname [(none)]> \s
--------------
mysql Ver 14.14 Distrib 5.5.35, for debian-linux-gnu (x86_64) using readline 6.2

Connection id: 63
Current database:
Current user: localturn2@localturn2
SSL: Cipher in use is DHE-RSA-AES256-SHA

This is the same as detailed in the client documentation at:

https://dev.mysql.com/doc/refman/5.5/en/using-ssl-connections.html

  Posted by Chaoran Xie on July 22, 2014
One small tip, make sure you use full path for MASTER_SSL_CA when running CHANGE MASTER statement

so instead of something like
MASTER_SSL_CA = 'ca-cert.pem', MASTER_SSL_CAPATH = '/opt/newcerts/'

use
MASTER_SSL_CA = '/opt/newcerts/ca-cert.pem', MASTER_SSL_CAPATH = ''

  Posted by Fred W on March 31, 2015
Couple tips:
1. client cert is optional unless account used for replication requires X509.
2. When using CHANGE MASTER TO to config slave, parameter MASTER_SSL_CA and MASTER_SSL_CAPATH are resolved at slave side.
Sign Up Login You must be logged in to post a comment.