記事一覧

FTPS・証明書の怪

 仕事でFTPサーバ(SSL対応)を構築することになったのですが、ちょっとハマった点があるので、日記にまとめてみます。同じような状況の方はあまりいないと思いますが、参考になれば幸いです。

 私がFTPサーバを構築するうえで定められた条件は以下の通り。
・稼働中のサーバ(本来は別目的で使用)
・CentOS4系(関係ないけど最近yum消えて不便……)
・OpenSSLとOpenSSHは極力更新したくない
・自己証明書ではない(接続時に警告を出さない)

 で、詰まったのは証明書連鎖(チェイン)。チェーンと表記してるサイトさんも多いですが。
 信頼できる認証機関に証明書出してもらって、サーバ証明書・中間証明書を組んでみたのですが、どうもCentOSにデフォルトで入っているvsftpdがサーバ証明書しか読み込んでくれない模様。SSL通信自体は可能ですが、毎回警告が出るので『自己証明書と変わらんぞ』と調査をすることに。
 proftpdに乗り換えたりバージョンを2.0.4に上げてみたりするも不発。試しにCentOS5系のテストサーバでやると、こちらは無事中間証明書以上も読み込む。なぜか。
 vsftpdのソース版を解凍してChangelogを覗いてみると、2.0.4→2.0.5の更新内容に気になる記述が。

- Change SSL certificate load to cater for chaining too.

 どうもここで証明書連鎖の読み込み処理を修正したようです。つまり証明書連鎖については、アップデートで解消可能。
 裏付け取るために動作検証もしてみましたが、vsftpd2.0.5以上ならきちんと中間証明書も読み込むようです。

 問題は、vsftpdの2.0.5以上をインストールするために、OpenSSLの0.9.8が必要らしいという点。CentOS4系だとOpenSSLのパッケージ版は0.9.7までしかないのです。
 というわけで、OpenSSL0.9.8以上→vsftpd2.0.5以上の順でインストールする必要があります。無論どちらもソース版。OpenSSLは極力パッケージ版の邪魔にならないよう、vsftpdに必要なライブラリだけ適所に配置するようにしていきます。
 素直にOSアップグレードしたいところですが、稼働中のサーバなので無理。
 そんなこんなで2.0.5以上のvsftpdをCentOS4系の環境に設置。無事中間証明書以上を読み込むことに成功しました。

 ちなみにApache等は設定ファイル内に中間証明書を指定する項目がありますが、vsftpdにはありません。vsftpdでは、各証明書をcatコマンド等でひとまとめにすることで中間証明書以上を利用することができます。

(cat サーバ証明書 ; cat 中間証明書 ; cat ルート証明書) > vsftpdで指定する証明書ファイル

 証明書連鎖以外に『FireFTPで接続しようとすると途中で止まる』という問題もあったのですが、そちらについてはまた後日。