mysqlでは、SSL接続に対応しています。(少なくとも、CentOS,ScientificLinux,Debian,Ubuntu,Windowsで提供されているバイナリーパッケージでは対応しています。)
サーバーの設定ができていれば、その認証局の証明書をもって、以下のようなコマンドイメージでSSL接続できるようになります。
|
この際、上記のようにSSL接続エラーが発生することがあります。
今回は、mysqlでSSL接続ができない場合の原因と対処についてまとめてみました。
- 目次
- 履歴
2013年3月26日 初版
mysqlでSSL接続ができない場合の原因と対処
以降にその原因と思われる事項を列挙し、それぞれの対処方法について簡単に解説してみます。
コマンドラインのパラメータ(オプション)指定に誤りがある場合
一番多い誤りは、このパターンです。
[原因]
|
上記の例でいうと、
- ホスト名 : → 上記例では mysql.example.com
- データベース名 : → 上記例では test
- 証明書ファイル名 : → 上記例では example.crt
に誤りがある場合が多いです。
[対処]
- ホスト名 :
→ 間違いがないことを確認しましょう。また、IPアドレス指定で行ってみましょう。
- データベース名 :
→ 指定のユーザがアクセスできるデータベース名になっているか再度確認しましょう。
- 証明書ファイル名 :
→ ファイル名に間違いがないことを確認しましょう。また、フルパス指定で行ってみましょう。
証明書に誤りがある場合
意外に多いのは、このパターンです。
この証明書は、ディストリビューションで提要されるバイナリーパッケージ(厳密にはmysqlのmakeオプション)によって、うまくいったりいかなかったりするので注意が必要です。
[原因]
単純に証明書の作成手順の中で、Common Name の指定をブランクのままなどのいい加減な設定をしているとエラーが発生することがあります。
[対処]
Common Nameには、適当なユニークな名前を設定するようにしましょう。
プライベート認証局の証明書、サーバー証明書、クライアント証明書の作成方法について を参照の上、プライベート認証局の証明書、サーバー証明書、サーバー鍵の作成を再度見直してみましょう。
mysqlのSSL未対応、バージョン不一致の場合
これは、かなり希少なパターンです。
普通に自前でSSL未対応のバイナリをmakeしない限り、あるいは、それを意図したような特別なパッケージをインストールした場合でない限りにおいて、
SSL未対応のmysqlはないと思います。
また、バージョン不一致についても バージョンが 5.0 未満の場合を除き、これで接続エラーになることはないので、
これもかなり希少なパターンです。
[原因]
mysqlのSSL未対応をインストールした場合や、mysqlの5.0未満のバージョンを使用している場合には、SSL接続エラーになる場合があります。
[対処]
これについては、単純に以下のような対処になります。
- mysqlのSSL対応のものをインストールしなおす。
mysqlがSSL未対応のものか確認するには、以下のようなコマンドイメージで確認ができるとされています。
(以下の出力イメージのようにオプションsslについてエラーが出るようなら、mysqlがSSL未対応ということになります。)
$ mysqld --ssl --help 060525 14:18:52 [ERROR] mysqld: unknown option '--ssl'
このエラーは、mysql でも同じように出るはず?です。見たことないですが。
Redhat系では、mysqldは、サービスのためのスクリプトの名前でもありますから、混同しないようにしましょう。ここでの指定は、実行ファイルです。
(CentOSなら、/usr/libexec/mysqld にあります。Debianなら、/usr/sbin/mysqld にあります。)
- mysqlの5.0以上を使用するようにする。
mysqlのバージョンは、以下のようなコマンドイメージで確認ができます。
$ mysql --version mysql Ver 14.14 Distrib 5.1.67, for redhat-linux-gnu (i386) using readline 5.1
mysqlのクライアントとサーバーの使用しているSSLライブラリが不一致の場合
これが、広く知られていないので、はまり度が一番大きいです。
いろいろなOSの組み合わせでSSLの接続を行う場合に、発生するケースが多いです。
[原因]
これは、サーバーとクライアントが、Redhat系OS(CentOS,ScientificLinuxなど) と それ以外のOS(Debian,Ubuntu,Windowsなど) の組み合わせでは、
うまくいかないことがあるという意味でもあります。
それぞれのデフォルトで提供されているバイナリパッケージは、
- Redhat系OS(CentOS,ScientificLinuxなど) → OpenSSL ライブラリを使用しています。
- それ以外のOS(Debian,Ubuntu,Windowsなど) → yaSSL ライブラリを使用しています。
サーバー(mysqld)にOpenSSL ライブラリを使用したバイナリを使用して、
クライアント(mysql)にyaSSL ライブラリを使用したバイナリを使用した場合、
SSL接続エラーとなることがあります。
[対処]
これについては、いずれかのライブラリに統一したバイナリを再構築する必要があります。
まずは、いずれのライブラリを使用するにも必要な
mysqlのバイナリを再構築(make)するための開発環境をインストールしておきます。
|
|
- OpenSSL ライブラリを使用する場合
簡単にmakeするまでを解説しておきます。
makeに必要なパッケージをインストールします。
CentOS ScientificLinux
# MySQL に必要なライブラリをインストールします $ yum install readline-devel openssl-devel ncurses-devel zlib-devel ...
Debian Ubuntu
# MySQL に必要なライブラリをインストールします $ aptitude install libreadline-dev libssl-dev libncurses5-dev zlib1g-dev ...
MySQL をmakeします。
# MySQL 5.1.68 (5.1系最新版)の場合 # --- ここでは、MySQL 5.1.68 を使っていますが、必要に応じて必要なバージョンをダウンロードしてください。 $ wget 'http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.68.tar.gz/from/http://cdn.mysql.com/' -O mysql-5.1.68.tar.gz # MySQL 5.1.68 を解凍する $ tar xfz mysql-5.1.68.tar.gz # MySQL のmake環境を設定します。 # --- --with-ssl にopensslのパスを指定するところがポイントです。通常ライブラリは、/usr 配下になりますので、このままでOKです。独自でインストールされた場合は、パスを変更する必要があるでしょう。 $ cd mysql-5.1.68 [mysql-5.1.68]$ ./configure \ --with-readline \ --with-ssl=/usr \ --without-debug \ --enable-shared \ --with-embedded-server \ --localstatedir=/var/lib/mysql \ --with-unix-socket-path=/var/lib/mysql/mysql.sock \ --with-mysqld-user="mysql" \ --with-extra-charsets=all \ --with-big-tables \ --with-pic \ --with-plugin-innobase \ --without-plugin-innodb_plugin \ --with-plugin-partition \ --enable-local-infile \ --enable-largefile \ --enable-thread-safe-client \ --disable-dependency-tracking ... ... [mysql-5.1.68]$ make ... [mysql-5.1.68]$ make install ...
- yaSSL ライブラリを使用する場合
簡単にmakeするまでを解説しておきます。
makeに必要なパッケージをインストールします。
CentOS ScientificLinux
# MySQL に必要なライブラリをインストールします # --- yaSSL ライブラリは、mysqlに同梱されているので、opensslの時のような必要なライブラリはありません。 $ yum install readline-devel ncurses-devel zlib-devel ...
Debian Ubuntu
# MySQL に必要なライブラリをインストールします # --- yaSSL ライブラリは、mysqlに同梱されているので、opensslの時のような必要なライブラリはありません。 $ aptitude install libreadline-dev libncurses5-dev zlib1g-dev ...
MySQL をmakeします。
# MySQL 5.1.68 (5.1系最新版)の場合 # --- ここでは、MySQL 5.1.68 を使っていますが、必要に応じて必要なバージョンをダウンロードしてください。 $ wget 'http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.68.tar.gz/from/http://cdn.mysql.com/' -O mysql-5.1.68.tar.gz< # MySQL 5.1.68 を解凍する $ tar xfz mysql-5.1.68.tar.gz $ cd mysql-5.1.68 # MySQL のmake環境を設定します。 # --- --with-ssl にパスを指定しないところがポイントです。 [mysql-5.1.68]$ ./configure \ --with-readline \ --with-ssl \ --without-debug \ --enable-shared \ --with-embedded-server \ --localstatedir=/var/lib/mysql \ --with-unix-socket-path=/var/lib/mysql/mysql.sock \ --with-mysqld-user="mysql" \ --with-extra-charsets=all \ --with-big-tables \ --with-pic \ --with-plugin-innobase \ --without-plugin-innodb_plugin \ --with-plugin-partition \ --enable-local-infile \ --enable-largefile \ --enable-thread-safe-client \ --disable-dependency-tracking ... ... [mysql-5.1.68]$ make ... [mysql-5.1.68]$ make install ...
|
|
|
このとき(デバッグを有効にする場合)、make で 以下のようなエラーが出力されることがあります。
CentOS ScientificLinux
|
Debian Ubuntu
|
mysql-5.1.68/cmd-line-utils/libedit/Makefile
|
また、デバッグ情報も必要ない方は、以下のように指定することで上記のようなエラーも出力されません。
|
通常、同じOSでのSSL接続確認ができれはOKで終わりのはずですが、他OSなどからのSSL接続不可時のはまり度は結構高いです。
そもそも mysqlでSSL接続ができない場合のエラー出力が、あまりに簡素で、情報が少ないのがその原因でもありますが、 接続できないことが、非常に希少なケースでもあるのでそうなんでしょうね。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :