チケット #36819

登録: 2016-11-25 17:02

最終更新: 2017-09-29 00:07

FTPSでLISTに失敗するようになった

報告者:(匿名)担当者:(未割り当て)
優先度:5 - 中マイルストーン:(未割り当て)
チケットの種類:バグ重要度:5 - 中
コンポーネント:(未割り当て)状況:完了
解決法なし

チケットの詳細

大塚商会のアルファメールプレミアというレンタルサーバーを利用しているのですが、自己責任ながら自己署名SSL証明書を登録しておくと、FFFTPからFTPS (Explicit)を利用することができていました。 1.99a-20160927までは問題なく使えていたのですが、1.99a-20161113にアップデートしてからは、接続はするもののLISTコマンドに失敗してファイル一覧が取れなくなっています。

現在は1.99a-20160927に戻すことで使えていますが、今後のバージョンでも使えるようになってくれればと思います。

ちなみに、1.99a-20161113にアップデートした状態で、FFFTP.exeだけを1.99a-20160927のものに差し替えると、改竄の警告が出るものの無視すると正常に動作するのを確認しました。 この間のアップデートはOpenSSL更新に伴うハッシュの書き換えくらいしかないようなので不思議なのですが。。。

以下、ログです。

==============
FFFTP Ver.1.99a-20161113 64bit Copyright(C) 1997-2010 Sota & cooperators.
Copyright (C) 2011-2016 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, unarist, Asami, fortran90, tomo1192, Yuji Tanaka, Moriguchi Hirokazu, Fu-sen).
デフォルトのマスターパスワードが使われます.
マルウェアの攻撃を防ぐため,固有のマスターパスワードを設定することをおすすめします
OpenSSLが読み込まれました.
----------------------------
FTP over Explicit SSL/TLS (FTPES)を使用します.
ホスト xxxxxx.jp を探しています. (TCP/IPv4)
ホスト xxxxxx.jp (xxx.xxx.xxx.xxx (21)) に接続しています. (TCP/IPv4)
接続しました. (TCP/IPv4)
220 FTP Server ready.
>AUTH TLS
234 AUTH TLS successful
>PBSZ 0
200 PBSZ 0 successful
>PROT P
200 Protection set to Private
>USER xx-xxxxx
331 Password required for xx-xxxxx
>PASS [xxxxxx]
230 User xx-xxxxx logged in.
>FEAT
211-Features:
 MDTM
 AUTH TLS
 PBSZ
 PROT
 REST STREAM
 SIZE
211 End
>TYPE A
200 Type set to A
>PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,xxx,xxx).
ダウンロードのためにホスト xxx.xxx.xxx.xxx (40160) に接続しています. (TCP/IPv4)
接続しました. (TCP/IPv4)
>LIST
150 Opening ASCII mode data connection for file list
>ABOR
226 Transfer complete
226 Abort successful
ファイル一覧の取得を中止しました.
ファイル名の漢字コードを判別できませんでした.
>>CD C:\
>CWD /
250 CWD command successful
>XPWD
257 "/" is the current directory
>TYPE A
200 Type set to A
>PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,xxx,xxx).
ダウンロードのためにホスト xxx.xxx.xxx.xxx (40004) に接続しています. (TCP/IPv4)
接続しました. (TCP/IPv4)
>LIST
150 Opening ASCII mode data connection for file list
>ABOR
226 Transfer complete
226 Abort successful
ファイル一覧の取得を中止しました.
ファイル一覧の取得に失敗しました.
==============

添付ファイル

添付ファイルリスト添付ファイルはありません
新規添付ファイル追加
添付ファイルの追加添付ファイルの追加にはログインが必要です

チケットの履歴 - 9 件中 3 件表示 [古い履歴も表示する]

2016-11-25 17:02 更新者: None

  • 新しいチケット "FTPSでLISTに失敗するようになった" が作成されました

2016-11-26 20:26 更新者: s_kawamoto

コメント

ご報告ありがとうございます。

LISTコマンドの直後に転送を中止するABORコマンドが発行されているようです。 この状態になる条件としては以下のいずれかが考えられます。

  • 受信中止ボタンをクリックする。
  • HDDの空き容量が不足する等により一時フォルダに書き込みができない。

ただ、上で書かれている通り、今回の更新はルート証明書とOpenSSLのみの変更であり、FFFTP.exeのみを1.99a-20160927に戻すことで解決する理由としては不十分です。 そこでもう一つ考えられる要因は、お使いのセキュリティソフト(ファイアウォールやアンチウィルス等)により、未知の(公開されて日が浅い)実行ファイルに対して何らかの保護(いわゆるサンドボックス化)を行い、その結果として一時フォルダの書き込みに失敗しているのかと思います。 もし可能であれば、お手数ですが、セキュリティソフトを無効化して1.99a-20161113を実行していただけますか。

よろしくお願いいたします。

2016-11-28 16:06 更新者: yyamasak

コメント

s_kawamoto への返信

* 受信中止ボタンをクリックする。

受信中止は押していないのでこれではないです。

* HDDの空き容量が不足する等により一時フォルダに書き込みができない。

Cドライブには58GBの空き容量があるのでこれでもなさそうです。

もし可能であれば、お手数ですが、セキュリティソフトを無効化して1.99a-20161113を実行していただけますか。

NOD32 Antivirus 9を無効化してみましたが、結果は変わりませんでした(ABORが送信されます)。

その後、1.99a-20160927と1.99a-20161113のソースをVS2015でビルドして、デバッガにかけてみたところ、 上記のケースではなく、以下のdo_recvがSOCKET_ERROR(-1)を返したときにABORT_ERROR(2)がセットされていました。

具体的なデータを見てみると、LISTの応答が7333バイトのデータの場合、暗号化の有り無しによらず合計7333バイト受信するのですが、 最後の一回のdo_recvの呼び出しの戻り値が、暗号化ありの場合-1 (SOCKET_ERROR)であり、暗号化なしの場合0になっていました。

残念ながら今日はここまでしか分からなかったのですが、何かヒントになれば幸いです。

ffftp-a6deff8\getput.c (1816行目~)

  1. if((iNumBytes = do_recv(dSkt, Buf, BUFSIZE, 0, &TimeOutErr, CancelCheckWork)) <= 0)
  2. {
  3. SetTaskMsg("do_recv(e)=%d", iNumBytes); // iNumBytes (0 または -1になる)
  4. if(TimeOutErr == YES)
  5. {
  6. SetErrorMsg(MSGJPN094);
  7. SetTaskMsg(MSGJPN094);
  8. if(Pkt->hWndTrans != NULL)
  9. ClearAll = YES;
  10. if(Pkt->Abort == ABORT_NONE)
  11. Pkt->Abort = ABORT_ERROR;
  12. }
  13. else if(iNumBytes == SOCKET_ERROR)
  14. {
  15. if(Pkt->Abort == ABORT_NONE)
  16. {
  17. SetTaskMsg("ABORT_ERROR iNumBytes=-1");
  18. Pkt->Abort = ABORT_ERROR; // FTPESでは、ここでエラーがセットされる。
  19. }
  20. }
  21. break;
  22. }
  23. SetTaskMsg(Buf);
  24. SetTaskMsg("do_recv=%d", iNumBytes); // 暗号化の有無によらず、ここの合計は同じになる。

2016-11-28 17:31 更新者: yyamasak

コメント

書き忘れましたが、SOCKET_ERRORのelse if部分をコメントアウトすると、とりあえずリストが表示されるようになります。

2016-11-28 20:16 更新者: yyamasak

コメント

結局はOpenSSLのSSL_readが-1を返すということにたどり着いたので、CHANGESの内容を見ると、

*) OpenSSL now fails if it receives an unrecognised record type in TLS1.0
   or TLS1.1. Previously this only happened in SSLv3 and TLS1.2. This is to
   prevent issues where no progress is being made and the peer continually
   sends unrecognised record types, using up resources processing them.
   [Matt Caswell]

unrecognised record typeの意味が分かってませんが、要するにTLS1.2に対応するような証明書に変えればいいということだろうと思いました。

現在は自己署名のものを使っており、HTTPSでアクセスするとGoogle ChromeではTLS1.0を使っていると認識されているため、おそらくこれが原因と考え、署名アルゴリズムがsha256RSAとなった証明書をサーバーに登録するところまではできたのですが、FTPESの結果は変わらず、Google ChromeでもTLS1.0を使っていると認識されたままでした。

アルファメールの管理ページなどの保護されたページを見てもTLS1.0となっているので、そもそもサーバーが対応してないということなのかもしれませんが、 ともかくFFFTP本体の問題ではないという理解に至りました。

ということで、当面は自動更新を無効にして1.99a-20160927を使うしかなさそうです。

お騒がせしました。

2016-12-03 14:19 更新者: s_kawamoto

コメント

詳細ありがとうございました。 FFFTP.exeのみではなくssleay32.dllとlibeay32.dllも1.99a-20160927のものに戻したということでしょうか。

OpenSSLのAPIやコンパイル時のオプションで対策可能か確認します。

2016-12-06 17:35 更新者: yyamasak

コメント

s_kawamoto への返信

FFFTP.exeのみではなくssleay32.dllとlibeay32.dllも1.99a-20160927のものに戻したということでしょうか。

はい。今は全てオリジナルの1.99a-20160927のファイルにして使っています。

OpenSSLのAPIやコンパイル時のオプションで対策可能か確認します。

そうしてもらえると助かります。

2017-09-28 15:46 更新者: yyamasak

コメント

久しぶりに更新チェックしてみたところ、それっぽい更新内容が書かれていたので、 1.99a-20170924を試してみたところ、アルファメールプレミアでもFTPESでのLISTコマンドに成功するようになりました。 ありがとうございました。

この件、クローズとして下さい。

2017-09-29 00:07 更新者: s_kawamoto

  • チケット完了時刻2017-09-29 00:07 に更新されました
  • 状況オープン から 完了 に更新されました

追記/更新 #36819 (FTPSでLISTに失敗するようになった)

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする