2015年8月4日火曜日

MySQL 5.7.8で追加されたrequire_secure_transportでSSL接続を強要できる

my.cnfの[mysqld]セクションに require_secure_transport と書いておくと、SSL接続を強要できるらしい。

MySQL :: MySQL 5.7 Reference Manual :: 5.1.4 Server System Variables


# service mysqld restart --require_secure_transport
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]

$ mysql -uroot

mysql> SELECT @@require_secure_transport;
+----------------------------+
| @@require_secure_transport |
+----------------------------+
|                          1 |
+----------------------------+
1 row in set (0.00 sec)

( ´-`).oO(余談だけど、/etc/init.d/mysqld [re]startの後ろにロングオプションつけると、mysqld_safeにそのまま渡してくれるんですよこれ豆知識。


mysql> status
--------------
mysql  Ver 14.14 Distrib 5.7.8-rc, for Linux (x86_64) using  EditLine wrapper

Connection id:          4
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.8-rc MySQL Community Server (GPL)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 1 min 28 sec

Threads: 1  Questions: 6  Slow queries: 0  Opens: 105  Flush tables: 1  Open tables: 98  Queries per second avg: 0.068
--------------

UNIXソケット接続の場合はSSLもへったくれもないのでこれは制限されない。


$ mysql -uroot --protocol=tcp

mysql> STATUS
--------------
mysql  Ver 14.14 Distrib 5.7.8-rc, for Linux (x86_64) using  EditLine wrapper

Connection id:          8
Current database:
Current user:           root@localhost
SSL:                    Cipher in use is DHE-RSA-AES256-SHA
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.7.8-rc MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               3306
Uptime:                 5 min 54 sec

Threads: 1  Questions: 22  Slow queries: 0  Opens: 107  Flush tables: 1  Open tables: 100  Queries per second avg: 0.062
--------------

MySQL 5.7から、コマンドラインクライアントもデフォルトで--sslを使おうとするので、特に何も指定しなくても勝手にSSLでつなぎに行く。
これを明示的に無効にしてやる(または、5.6以前のコマンドラインクライアントは--sslをつけない限りSSLを使おうとしないので、そっちで接続しようとすると)

$ mysql -uroot --protocol=tcp --skip-ssl
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

おお、これは良い感じだ。

CREATE USERGRANTステートメントのREQUIRE SSLがユーザー単位なのに対し、こっちはサーバー全体で一括指定。SET GLOBALによるオンラインの変更も可能。

…まさかこれ暗黙のデフォルトで1にしたりとかしないですよねー? (・∀・)ゞ

0 件のコメント :

コメントを投稿