WinSCP の FTPS はプロキシ経由でログインできるがファイル一覧を取得できない
FTPS で HTTP CONNECT を使うときは、制御接続だけでなくパッシブデータ接続も確認してください。
FTPS のログインが成功しても、確認できるのは制御接続が機能したことだけです。ディレクトリ一覧には別の接続が必要なので、プロキシがログインを許可しつつ次の段階を遮断することがあります。
明示的 FTPS サーバーの場合、WinSCP .NET で制御経路とパッシブモードを設定します。
var options = new WinSCP.SessionOptions
{
Protocol = WinSCP.Protocol.Ftp,
HostName = "ftp.example.net",
PortNumber = 21,
UserName = ftpUser,
Password = ftpPassword,
FtpSecure = WinSCP.FtpSecure.Explicit,
FtpMode = WinSCP.FtpMode.Passive
};
options.AddRawSettings("ProxyMethod", "3");
options.AddRawSettings("ProxyHost", "proxy.example.net");
options.AddRawSettings("ProxyPort", "8080");ProxyMethod の値 3 は HTTP CONNECT を選択します。この設定はアプリケーションの通常の WinSCP Session ライフサイクルを通じて開き、中継サーバーが認証を要求する場合は ProxyUsername と ProxyPassword の生設定を追加します。
一覧取得の失敗を追う
セッションログで、ネゴシエートされたパッシブデータのエンドポイントとその接続失敗を確認します。プロキシはその宛先とポートに加え、FTP の制御エンドポイントも許可する必要があります。そのため、制御ポートへの CONNECT だけを許可するルールでは、ログインは通るのに一覧取得が拒否されることがあります。
制御ポートだけを変えても、遮断されたデータ経路は直りません。ネットワークポリシーを確認するときは、ログに記録されたデータエンドポイントを使ってください。
この例はポート 21 で明示的 FTPS を開始し、TLS をネゴシエートします。暗黙的 FTPS のエンドポイントでは、対応する FtpSecure モードとサーバーのポートを使ってください。どちらの場合も、サーバーの実際の TLS ホスト名と証明書検証の設定を使ってください。