Azure

Azure Database for MySQLにSSL接続する場合のmysqlコマンドの挙動と利用できるSSL Cipherの確認。

はじめに

Azure Database for MySQLに接続する場合の注意事項です。
mysqlのバージョンによって挙動が異なるためまとめました。

Azure Database for MySQLにSSL接続する方法

以下では、Linux、Windowsなどの接続方法が説明されています。
Configure SSL connectivity in your application to securely connect to Azure Database for MySQL
https://docs.microsoft.com/ja-jp/azure/mysql/howto-configure-ssl

重要なのはCAファイルを .cer ファイルから .pem に変換することです。

以下よりcrtをダウンロード
https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt

変換します。

openssl x509 -inform DER -in BaltimoreCyberTrustRoot.crt -out MyServerCACert.pem

caを指定する場合は、MyServerCACert.pemを指定します。

mysql5.1

AzureでCentOS6系を選択し、mysqlを導入するとmysql5.1がインストールされます。

mysql5.1では以下の挙動になります。

$ mysql --version
mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

指定がない場合、SSLは有効になりません。

# mysql -p -u dbuser@demomysql3 -h demomysql3.mysql.database.azure.com
Enter password:
ERROR 2001 (28000): SSL connection is required. Please specify SSL options and retry.

--ssl-cipherを指定することSSLを有効にします。

# mysql -p -u dbuser@demomysql3 -h demomysql3.mysql.database.azure.com --ssl-cipher=AES256-SHA
Enter password:
ERROR 2026 (HY000): SSL connection error

作成したpemを指定します。

# mysql -p -u dbuser@demomysql3 -h demomysql3.mysql.database.azure.com --ssl-ca=MyServerCACert.pem
Enter password:
ERROR 2026 (HY000): SSL connection error

どれも接続できませんでした。

mysql5.6

AzureでCentOS6系を選択し、mysql-communityから5.6を導入します。

yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum -y install mysql-community-client
$ mysql --version
mysql  Ver 14.14 Distrib 5.6.36, for Linux (x86_64) using  EditLine wrapper

指定がない場合、SSLは有効になりません。

# mysql -p -u dbuser@demomysql3 -h demomysql3.mysql.database.azure.com
Enter password:
ERROR 2001 (28000): SSL connection is required. Please specify SSL options and retry.

--ssl-cipherを指定することSSLを有効にします。

# mysql -p -u dbuser@demomysql3 -h demomysql3.mysql.database.azure.com --ssl-cipher=AES256-SHA
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 65533
Server version: 5.6.26.0 MySQL Community Server (GPL)

作成したpemを指定します。

# mysql -p -u dbuser@demomysql3 -h demomysql3.mysql.database.azure.com --ssl-ca=MyServerCACert.pem
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 65531
Server version: 5.6.26.0 MySQL Community Server (GPL)

SSLオプションを付けることでSSLが行えます。

mysql5.7

AzureでCentOS7系を選択し、mysqlを導入するとmysql5.7がインストールされます。

mysql --version
mysql  Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using  EditLine wrapper

指定がない場合でも自動判定?してSSL接続されます。

# mysql -p -u dbuser@demomysql3 -h demomysql3.mysql.database.azure.com
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 65528
Server version: 5.6.26.0 MySQL Community Server (GPL)

--ssl-cipherを指定することSSLを有効にします。

# mysql -p -u dbuser@demomysql3 -h demomysql3.mysql.database.azure.com --ssl-cipher=AES256-SHA
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 65533
Server version: 5.6.26.0 MySQL Community Server (GPL)

作成したpemを指定します。

# mysql -p -u dbuser@demomysql3 -h demomysql3.mysql.database.azure.com --ssl-ca=MyServerCACert.pem
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 65532
Server version: 5.6.26.0 MySQL Community Server (GPL)

特に指定しなくても接続できます。

利用できるSSL Cipher

mysql> SHOW STATUS LIKE 'Ssl_cipher_list';
+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name   | Value                                                                                                                                                                                                                                       |
+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Ssl_cipher_list | DHE-RSA-AES256-SHA:AES256-SHA:DHE-RSA-AES128-SHA:AES128-SHA:AES256-RMD:AES128-RMD:DES-CBC3-RMD:DHE-RSA-AES256-RMD:DHE-RSA-AES128-RMD:DHE-RSA-DES-CBC3-RMD:RC4-SHA:RC4-MD5:DES-CBC3-SHA:DES-CBC-SHA:EDH-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC-SHA |
+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

利用できるSSL Cipher一覧

DHE-RSA-AES256-SHA
AES256-SHA
DHE-RSA-AES128-SHA
AES128-SHA
AES256-RMD
AES128-RMD
DES-CBC3-RMD
DHE-RSA-AES256-RMD
DHE-RSA-AES128-RMD
DHE-RSA-DES-CBC3-RMD
RC4-SHA
RC4-MD5
DES-CBC3-SHA
DES-CBC-SHA
EDH-RSA-DES-CBC3-SHA
EDH-RSA-DES-CBC-SHA

--ssl-cipher を指定する場合は上記を指定できます。

まとめ

mysqlクライアントは問題ない限りは、CentOS7は5.7を利用しましょう。
CentOS6は5.6の場合は--ssl-cipherに一覧のどれかを指定すればよいでしょう。
本稿は、あくまでもコマンドで接続する場合です。アプリケーションなどではセキュリティを考慮した接続をしてください。
ではでは

-Azure
-,