レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

mysqlでSSL接続ができない場合の原因と対処

2013年3月26日 2015年5月15日
mysql troubleshooting

mysqlでは、SSL接続に対応しています。(少なくとも、CentOS,ScientificLinux,Debian,Ubuntu,Windowsで提供されているバイナリーパッケージでは対応しています。)
サーバーの設定ができていれば、その認証局の証明書をもって、以下のようなコマンドイメージでSSL接続できるようになります。

$ mysql -h mysql.example.com -u hoge -p hogehoge  test --ssl-ca=example.crt
ERROR 2026 (HY000): SSL connection error

この際、上記のようにSSL接続エラーが発生することがあります。

今回は、mysqlでSSL接続ができない場合の原因と対処についてまとめてみました。

mysqlでSSL接続ができない場合の原因と対処

以降にその原因と思われる事項を列挙し、それぞれの対処方法について簡単に解説してみます。

コマンドラインのパラメータ(オプション)指定に誤りがある場合

一番多い誤りは、このパターンです。

[原因]

$ mysql -h mysql.example.com -u hoge -p hogehoge  test --ssl-ca=example.crt
ERROR 2026 (HY000): SSL connection error

上記の例でいうと、

  • ホスト名 : → 上記例では mysql.example.com
  • データベース名 : → 上記例では test
  • 証明書ファイル名 : → 上記例では example.crt

に誤りがある場合が多いです。


[対処]

  • ホスト名 :

    → 間違いがないことを確認しましょう。また、IPアドレス指定で行ってみましょう。

  • データベース名 :

    → 指定のユーザがアクセスできるデータベース名になっているか再度確認しましょう。

  • 証明書ファイル名 :
    → ファイル名に間違いがないことを確認しましょう。また、フルパス指定で行ってみましょう。


証明書に誤りがある場合

意外に多いのは、このパターンです。
この証明書は、ディストリビューションで提要されるバイナリーパッケージ(厳密にはmysqlのmakeオプション)によって、うまくいったりいかなかったりするので注意が必要です。

[原因]

単純に証明書の作成手順の中で、Common Name の指定をブランクのままなどのいい加減な設定をしているとエラーが発生することがあります。


[対処]

Common Nameには、適当なユニークな名前を設定するようにしましょう。
プライベート認証局の証明書、サーバー証明書、クライアント証明書の作成方法について を参照の上、プライベート認証局の証明書、サーバー証明書、サーバー鍵の作成を再度見直してみましょう。

Redhat系(CentOS ScientificLinux )では、このCommon Nameでエラーになります。これは、OpenSSLのライブラリを使用しているから?なのかなと思います。

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)するための開発環境をインストールしておきます。

CentOS ScientificLinux
# make に必要なコンパイラをインストールします
$ yum install make gcc gcc-c++return
...
Debian Ubuntu
# make に必要なコンパイラをインストールします
$ aptitude install make gcc g++return
...
  • OpenSSL ライブラリを使用する場合

    簡単にmakeするまでを解説しておきます。

    makeに必要なパッケージをインストールします。

    CentOS ScientificLinux
    # MySQL に必要なライブラリをインストールします
    $ yum install readline-devel openssl-devel ncurses-devel zlib-develreturn
    ...
    Debian Ubuntu
    # MySQL に必要なライブラリをインストールします
    $ aptitude install libreadline-dev libssl-dev libncurses5-dev zlib1g-devreturn
    ...

    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.gzreturn
    # MySQL 5.1.68 を解凍する
    $ tar xfz mysql-5.1.68.tar.gzreturn
    
    # MySQL のmake環境を設定します。
    # ---  --with-ssl にopensslのパスを指定するところがポイントです。通常ライブラリは、/usr 配下になりますので、このままでOKです。独自でインストールされた場合は、パスを変更する必要があるでしょう。
    $ cd mysql-5.1.68return
    [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-trackingreturn
      ...
      ...
    [mysql-5.1.68]$ makereturn
      ...
    [mysql-5.1.68]$ make installreturn
      ...

  • yaSSL ライブラリを使用する場合

    簡単にmakeするまでを解説しておきます。

    makeに必要なパッケージをインストールします。

    CentOS ScientificLinux
    # MySQL に必要なライブラリをインストールします
    # --- yaSSL ライブラリは、mysqlに同梱されているので、opensslの時のような必要なライブラリはありません。
    $ yum install readline-devel ncurses-devel zlib-develreturn
    ...
    Debian Ubuntu
    # MySQL に必要なライブラリをインストールします
    # --- yaSSL ライブラリは、mysqlに同梱されているので、opensslの時のような必要なライブラリはありません。
    $ aptitude install libreadline-dev libncurses5-dev zlib1g-devreturn
    ...

    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.gzreturn
    # MySQL 5.1.68 を解凍する
    $ tar xfz mysql-5.1.68.tar.gzreturn
    $ cd mysql-5.1.68return
    
    # 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-trackingreturn
      ...
      ...
    [mysql-5.1.68]$ makereturn
      ...
    [mysql-5.1.68]$ make installreturn
      ...


古いバージョン ( 5.1.11 より前) では、yaSSL、OpenSSLの切り替えは、以下のオプションで明示的に指定していましたが、
# OpenSSL を使用する場合
$ ./configure  ...  --with-openssl ... 

# yaSSL を使用する場合
$ ./configure  ...  --with-yassl ... 
新しいバージョン ( 5.1.11 以降) では、–with-ssl に パスを指定するか否かで指定するようになりました。
# OpenSSL を使用する場合
$ ./configure  ...  --with-ssl=/usr ... 

# yaSSL を使用する場合
$ ./configure  ...  --with-ssl ... 

以下のようにデバッグ版+必要最小限(クライアントのみ)の設定でもOKです。
./configure  --with-readline --with-ssl=/usr --with-debug=full --without-server --prefix=/usr/local/mysql51d
(もちろん、–with-ssl=/usr or –with-ssl は、使うSSLライブラリによって切り替える必要があります。)

このとき(デバッグを有効にする場合)、make で 以下のようなエラーが出力されることがあります。

CentOS ScientificLinux
cc1: warnings being treated as errors
el.c: In function ‘el_init’:
el.c:77: warning: implicit declaration of function ‘wcsdup’
el.c:77: warning: assignment makes pointer from integer without a cast
make[2]: *** [el.o] Error 1
make[2]: Leaving directory `/dist/src/mysql-5.1.63/cmd-line-utils/libedit'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/dist/src/mysql-5.1.63/cmd-line-utils'
make: *** [all-recursive] Error 1

Debian Ubuntu
cc1: warnings being treated as errors
terminal.c: In function ‘terminal_set’:
terminal.c:911:3: error: passing argument 1 of ‘tgetflag’ discards qualifiers from pointer target type /usr/include/term.h:794:28: note: expected ‘char *’ but argument is of type ‘const char *’
terminal.c:912:3: error: passing argument 1 of ‘tgetflag’ discards qualifiers from pointer target type /usr/include/term.h:794:28: note: expected ‘char *’ but argument is of type ‘const char *’
terminal.c:914:3: error: passing argument 1 of ‘tgetflag’ discards qualifiers from pointer target type /usr/include/term.h:794:28: note: expected ‘char *’ but argument is of type ‘const char *’
terminal.c:915:3: error: passing argument 1 of ‘tgetflag’ discards qualifiers from pointer target type /usr/include/term.h:794:28: note: expected ‘char *’ but argument is of type ‘const char *’
terminal.c:917:3: error: passing argument 1 of ‘tgetflag’ discards qualifiers from pointer target type /usr/include/term.h:794:28: note: expected ‘char *’ but argument is of type ‘const char *’
terminal.c:918:3: error: passing argument 1 of ‘tgetflag’ discards qualifiers from pointer target type /usr/include/term.h:794:28: note: expected ‘char *’ but argument is of type ‘const char *’
terminal.c:920:3: error: passing argument 1 of ‘tgetnum’ discards qualifiers from pointer target type /usr/include/term.h:795:28: note: expected ‘char *’ but argument is of type ‘const char *’
terminal.c:921:3: error: passing argument 1 of ‘tgetnum’ discards qualifiers from pointer target type /usr/include/term.h:795:28: note: expected ‘char *’ but argument is of type ‘const char *’
make[2]: *** [terminal.o] Error 1
make[2]: Leaving directory `/home/openxs/bzr/mysql-5.1-work/cmd-line-utils/libedit'
make[1]: *** [all-recursive] Error 1
これは、以下のファイルを編集することで回避することができます。
mysql-5.1.68/cmd-line-utils/libedit/Makefile
...
AM_CFLAGS =  -Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing  -Werror  -Wdeclaration-after-statement
AM_CXXFLAGS =  -Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing  -Werror -Wno-unused-parameter
...
-Werror を削除するだけです。

また、デバッグ情報も必要ない方は、以下のように指定することで上記のようなエラーも出力されません。
--with-debug=full--without-debug 

MySQLのSSL接続方法は、非常に簡単ですので、
通常、同じOSでのSSL接続確認ができれはOKで終わりのはずですが、他OSなどからのSSL接続不可時のはまり度は結構高いです。

そもそも mysqlでSSL接続ができない場合のエラー出力が、あまりに簡素で、情報が少ないのがその原因でもありますが、 接続できないことが、非常に希少なケースでもあるのでそうなんでしょうね。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

mysql を make install してみる

今回は、mysqlを make install してみます。 mysqlでSSL接続ができない場合の原因と対処 でも一部書いていましたが、ここ ...

FreeBSDでmysqlをバージョンアップする

前回、mysqlのインストールを行いました。 今回は、先のインストール手順の続編で、アップデート手順です。 他のサーバー(サービス)のバ ...

シェル(主にTeraTerm)でメターキー(Delete キー, Home キー , End キー, Insert キー)の動きが変なので対応してみた

今回は、シェルのキー操作についてです。 シェルは、BシェルであれCシェルであれ、キー操作で同じような動作をして欲しいものです。 もちろんアル ...

MySQLのログの種類とログの仕方を調べてみた(実施例)

今回は、MySQLでロギングを行ってみます。 一口にロギングと言ってもMySQLでは、以下の4つの種類があります。 エラー ログ ...

mysqlのレプリケーションを使う

今回は、mysqlのレプリケーション(replication)です。 レプリケーション(replication)とは、 直訳 ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2450 [s]