問題 §
Azure上のVMにWindowsサーバが存在する。
このサーバにセキュアなftp転送を設定した。
しかし、クライアント上のWinSCPからFTPSで接続できない。
前提知識 §
- SFTPとFTPSは別物である。IISがサポートするのはFTPS (紛らわしいが間違えると接続できない)
- FTPSには証明書が必要だが、AzureのVMには標準で提供されているので新規に作らなくても良い
- FTPSにはImplicitモード(最初から全て暗号化されている)とExplicitモード(通信開始後にコマンドで暗号化を指定する)が存在する。IISがサポートするのはExplicitモード (2017/11/01追記 Azure上のIISとFTPSでファイル転送する場合の罠参照
解決・IIS側 §
- ネットを調べると、FTPSのWellknownポートは990と書いてあるが、IISのftpサーバはそのポート番号では接続できない。そもそも、FTPSのポート番号を指定する項目が存在しない。ftpで設定したポート番号で接続したあと、コマンドで暗号化通信を開始するから。デフォルトではポート21をftpと共用する。
解決・WinSCP側 §
- セキュア通信する場合であっても、使用するプロトコルにはftpを選ぶ (SFTPは選ばない)
- 暗号化は、【明示的なTLS/SSL暗号化】を選び、【暗黙的なTLS/SSL暗号化】は選ばない (前者はExplicitモード、後者はImplicitモードを示すらしいが翻訳が良くなく、分かりにくい)
- ポート番号は990ではなく21 (IISが開いて待っているポートは21)
感想 §
「みんな使ってるIISとWinSCPなら安全パイなのだろうと思いきや、そうでもなかった。凄く下らないところで引っかかった」
「分かりにくかったポイントはどこ?」
「証明書まわりかと思いきや、そこはどうでも良かった。問題の1つは、IIS側にFTPSで待っているポート番号の設定がどこにもないこと。問題のもう1つはWinSCP側の【明示的/暗黙的】の用語の意味が分かりにくかったことだ」
「一時は途方に暮れたわけだね」
「しかし、IISはExplicitモードで、Explicitモードはコマンドで暗号化を開始するという情報を得て、やっと分かった。つまり、接続を開始する時点ではftpもFTPSも無いわけで、FTPS固有のポート番号を指定する項目は無くて当たり前だった」
「つまり、Wellknownポートは990という情報そのものが今回は邪魔だったわけだね」
「それはImplicitモードでのみ使うポート番号で、今回は関係なかった」
「もう1つは用語の翻訳だね」
「WinSCPを入れる際、言語に日本語を選ばなければ良かった。今では後悔している。インチキ翻訳はMS製品に限定されることはなく、どこの会社の製品でも、無料のソフトでも、OSSでも存在する」