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
1<?php 2define("FTP_SERVER" , "サーバーAのIPアドレス"); 3define("FTP_USER" , "www"); 4define("FTP_PASSWD" , "パスワード"); 5define("FTP_ROOT_DIR" , "/home/www"); 6 7 $conn_id = ftp_ssl_connect(FTP_SERVER); 8 if(ftp_login($conn_id, FTP_USER, FTP_PASSWD)){ 9 print "Current [".ftp_pwd($conn_id)."]\n"; 10 11 ftp_chdir($conn_id,FTP_ROOT_DIR); 12 print "Moved [".ftp_pwd($conn_id)."]\n"; 13 14 ftp_set_option($conn_id,FTP_TIMEOUT_SEC,10); 15 $timeout = ftp_get_option($conn_id,FTP_TIMEOUT_SEC); 16 print "timeout [".$timeout."sec]\n"; 17 18 print "List are ...\n"; 19 ftp_pasv($conn_id,true); 20 $list = ftp_nlist($conn_id, "."); 21 var_dump($list); 22 23 ftp_close($conn_id); 24 } 25exit; 26?>
このプログラムを実行した際、サーバー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にしても、さして問題はないのでしょうか。
もし、おわかりになる方いらっしゃいましたら、
ご教授いただけると幸いです。
以上、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/04 10:32