質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • PHP

    23486questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • FTP

    359questions

    FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

[FTP]コネクションの挙動について [vsftpd]

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,321

Reiku

score 28

2台のlinuxサーバー間でFTPSによるデータのやりとりを行いました。
その際に、疑問が浮かんだため、恐縮ですが質問させていただきます。

■ 各サーバー構成
・ FTPサーバー側
(仮)サーバー名:サーバーA
搭載OS:CentOS6.7
搭載FTPサーバー:vsftpd version 2.2.2

・FTPクライアント側
(仮)サーバー名:サーバーB
搭載OS:CentOS6.7
PHPプログラム経由でFTPの各種コマンドを実行

■ やったこと
サーバーBからサーバーAに対して、FTP接続を行い、ファイルリストを表示する
簡単なプログラムを作成しました。ソースコードを下記に示します。

<?php
define("FTP_SERVER"       , "サーバーAのIPアドレス");
define("FTP_USER"         , "www");
define("FTP_PASSWD"       , "パスワード");
define("FTP_ROOT_DIR"     , "/home/www");

        $conn_id = ftp_ssl_connect(FTP_SERVER);
        if(ftp_login($conn_id, FTP_USER, FTP_PASSWD)){
                print "Current [".ftp_pwd($conn_id)."]\n";

                ftp_chdir($conn_id,FTP_ROOT_DIR);
                print "Moved [".ftp_pwd($conn_id)."]\n";

                ftp_set_option($conn_id,FTP_TIMEOUT_SEC,10);
                $timeout = ftp_get_option($conn_id,FTP_TIMEOUT_SEC);
                print "timeout [".$timeout."sec]\n";

                print "List are ...\n";
                ftp_pasv($conn_id,true);
                $list = ftp_nlist($conn_id, ".");
                var_dump($list);

                ftp_close($conn_id);
        }
exit;
?>

このプログラムを実行した際、サーバーAのファイルリストを取得する際に、
うまくファイルリストが取得できず、サーバーAのVSFTPDログを見ると、下記エラーが発生していました。

"No SSL session reuse on data channel."
"522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page"

軽くWebで調べたところ、vsftpd.confに下記設定を追加すれば解決するということでした。

require_ssl_reuse=NO

確かに、この設定を追加したら、前述のエラーは発生しなくなり、問題なくプログラムが動作するように
なりました。しかし、理解できていない部分がいくつかあります。

★ 質問したいこと
① 発生したエラーの内容
SSLのセッションを再利用することを要求(required)されているが、
再利用できるセッションがない故に、エラーが発生しているということでしょうか?

② なぜ、SSLセッションが再利用されるのか
Webサイトの表示等では、SSLハンドシェイクが一度行われると、SSLのセッションを使いまわし、
表示を早くするなどで、SSLセッションの使いまわしが行われますが、
FTPS接続の場合でも、同様の現象が起こっているということでしょうか?

③ FTP接続時にSSLセッションの再利用することの必要性
vsftpd.confの初期設定では
require_ssl_reuse = YES
になっているようです。初期設定では、SSLセッションを再利用することを
要求しているわけですが、これには何かしらの理由があってのことかとは思うのですが、
FTPS接続における、セッションの再利用することにより、どのようなメリットがあるのでしょうか。
※ 設定をNOにしても、さして問題はないのでしょうか。

もし、おわかりになる方いらっしゃいましたら、
ご教授いただけると幸いです。
以上、よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

require_ssl_reuse について

英語のマニュアル(vsftpd.conf(5))に下記 URL が載っていました。

vsftpd-2.1.0 released

リンクを 2つ辿ると、下記 URL につながります。

CESA-2008-002 - rev 1

簡単にまとめると、以下のような内容です。(解釈が間違っていたらすみません)

【問題点】
コントロールコネクションでは認証があるけど、データコネクションでは認証がない。
FTP over SSL であっても、Man-in-the-Middle などでデータコネクションを先に確立できれば(その可能性は低いけれども)、通信内容を盗み見られたり、アップロードされる可能性がある。

【解決方法】
クライアント証明書を送り、コントロールコネクションとデータコネクションで一致することを確認するのがベストだけれども、それが可能な FTPクライアントはほとんどない。

そこで、認証の替わりに SSLセッションキャッシュを使う。
(コントロールコネクションの SSLセッションをデータコネクションで再利用するということだと思われます。)

質問への回答

① 発生したエラーの内容

FTPSクライアントが、コントロールコネクションの SSLセッションをデータコネクションに再利用できない仕様(または設定)のためにエラー。

② なぜ、SSLセッションが再利用されるのか

第三者に、コントロールコネクションと無関係のデータコネクションを確立させることを困難にするため。

③ FTP接続時にSSLセッションの再利用することの必要性

セキュリティを強化するため。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/04 19:32

    ありがとうございます。
    SSLセッションを再利用しようとする理由がなんとなくわかりました。
    謎な部分は少しありますが、もう少しいろいろと考えてみます

    キャンセル

同じタグがついた質問を見る

  • PHP

    23486questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • FTP

    359questions

    FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。