FTPS (File Transfer Protocol over SSL/TLS) は、FTPで送受信するデータをTLSまたはSSLで暗号化する通信プロトコル。IETFにより、 や で標準化されている。
既定のポート番号は、ポート990(TCP)とポート989(TCP)。ポート990(TCP)は、FTPSの制御コネクションに使用され、通信の暗号化を強制する。ポート989(TCP)は、FTPSのデータコネクションに使用され、暗号化されたデータ転送を行う。
概要 FTPの認証で送信されるユーザ名とパスワードの電文は、暗号化されていない状態(クリアテキスト)であるため、第三者に盗聴・侵入される危険性がある。FTPSはその危険性を回避するために制定された。
FTP は、1971年にARPANET用に策定された。 当時、ARPANETへのアクセスは軍事機関や大学に限られ、セキュリティ対策は不要だった。
ARPANETがNSFNETを経てインターネットへと発展するにつれ、データの送受信がより広範になり、盗聴のリスクも増加した。
1994年、NetscapeはSSLを開発し、安全な通信を実現した。 これは特にHTTPと組み合わせてHTTPSとして利用された。
SSLはFTPにも適用され、1996年にドラフト版RFCが公開された。 その後、公式のIANAポートが登録され、2005年にRFCとして正式に発表された。
暗号化の種類 FTPSには、認証コマンド(AUTHコマンド)実行後に暗号化通信を開始するExplicitモードと、FTPSサーバ接続開始時点から暗号化通信を開始するImplicitモードの2種類が存在する。このExplicitモードは特にFTPESとも呼ばれる。 Explicit(明示的)モード いわゆるSTARTTLSに相当する。
サーバの21/tcpポートに接続した後にクライアントがAUTHコマンドを実行して、使用するプロトコル(SSLまたはTLS)のネゴシエーションをおこない、適合したプロトコルでのハンドシェイク完了後に暗号化された通信がおこなわれる。 つまりExplicitモードの場合、クライアントがAUTHコマンドを実行しなければ通常のFTPとして機能する。 Implicit(暗黙的)モード サーバのポート990(TCP)に接続した直後にSSLまたはTLSによるハンドシェイクがおこなわれる。Implicitモードで動作するサーバに接続する場合、クライアントはサーバが採用している暗号化プロトコルに適合したFTPSクライアントソフトを使用する必要がある。また、データ転送チャネル(PORTまたはPASVコマンドで作成されるチャネル)での通信を暗号化する場合、PROTコマンドを用いて保護レベルをP (Private) に設定する必要がある。
なお、Implicitモードはがドラフトだった頃に第7版まで掲載されていたが、第8版で削除されており、正式なRFCには掲載されていない。
SFTPとの比較 SFTP (SSH File Transfer Protocol) はSSHの上でFTPとは別個のプロトコルにてファイル転送を実現するコマンドである。そのためSFTPはSSHのポートを使い既定のWell-known Portは22/tcpであり、FTPSとは全くの別物である。SFTPと比較したFTPSのメリットとして、ASCII/BINARY モードのサポートやフォルダ単位での転送がある。デメリットとしては、サーバー運用側でSSL証明書の購入コストがかかることであるが、これについてはワイルドカード証明書で登録すれば、自社SSLサイト(HTTPS)と共通の証明書を利用可能。
全体的なサポート FTPSは、サーバー側の公開鍵証明書およびクライアント側の認証証明書の使用を含む、TLSおよびSSL暗号化プロトコルの完全なサポートを提供する。また、AES、RC4、RC2、Triple DES、DESなどの互換性のある暗号もサポートする。さらに、ハッシュ関数としてSHA、MD5、MD4、MD2もサポートする。
使用範囲 Implicitモードでは、FTPSセッション全体が暗号化される。Explicitモードは、接続のどの部分を暗号化するかをクライアントが完全に制御できる点で異なる。FTPS制御チャネルとFTPSデータチャネルの暗号化の有効化および無効化はいつでも行うことができる。唯一の制限はFTPSサーバー側にあり、サーバーは暗号化ポリシーに基づいてコマンドを拒否する権限を持つ。
安全なコマンドチャネル 安全なコマンドチャネルモードには、AUTH TLSまたはAUTH SSLコマンドの発行によって入ることができる。その後、FTPSクライアントとサーバー間のすべてのコマンド制御は暗号化されていると見なされる。ユーザー名とパスワードのデータが第三者に盗聴されるのを避けるため、ユーザーの認証と認可の前にこの状態に入ることが一般的に推奨される。
安全なデータチャネル 安全なデータチャネルには、PROTコマンドの発行によって入ることができる。AUTH TLSコマンドが発行された際に、デフォルトで有効になるわけではない。その後、FTPSクライアントとサーバー間のすべてのデータチャネル通信は暗号化されていると見なされる。 FTPSクライアントは、CDC(clear data channel)コマンドを発行することで、いつでも安全なデータチャネルモードを終了できる。
暗号化を無効にする理由 以下のシナリオで転送を行う場合、データチャネルの暗号化を使用することは有利でない場合がある。
転送されるファイルが機密性の低いものであり、暗号化が不要な場合。 転送されるファイルがファイルレベルで既に暗号化されているか、暗号化されたVPNを通過しており、暗号化が冗長になる場合。 利用可能なTLSまたはSSLの暗号化モードが、望ましい暗号化レベルを満たしていない場合。これは、以前の米国の高強度暗号輸出法により、40ビットSSLに制限されていた可能性のある古いFTPSクライアントやサーバーでよく見られる。 以下のシナリオでは、制御チャネルの暗号化を使用することが有利でない場合がある。 クライアントまたはサーバーがネットワークファイアウォールやネットワークアドレス変換(NAT)デバイスの背後にある場合にFTPSを使用する場合。(下記の#ファイアウォールの非互換性を参照。) 匿名のFTPクライアントが同じセッション内でAUTHおよびCCC/CDCコマンドを繰り返し使用する場合。このような動作は、TLS/SSLセッションが毎回再生成される必要があり、サーバーのプロセッサ時間を消費するため、リソースベースのDoS攻撃として利用される可能性がある。
SSL証明書 HTTPSと同様に、FTPSサーバーは公開鍵証明書を提供する必要がある。これらの証明書は、OpenSSLなどのツールを使用して要求および作成できる。 これらの証明書が信頼された認証局によって署名されている場合、クライアントが要求したサーバーに接続していることが保証され、中間者攻撃を回避できる。証明書が信頼されたCAによって署名されていない場合(自己署名証明書)、FTPSクライアントは証明書が有効でないという警告を生成することがある。クライアントは証明書を受け入れるか、接続を拒否するかを選択できる。 これは、署名された証明書を提示せず、代わりに公開鍵の帯域外認証に依存するSSH File Transfer Protocol(SFTP)とは対照的である。
ファイアウォールの非互換性 FTPは動的なセカンダリポート(データチャネル用)を使用するため、多くのファイアウォールは、どのセカンダリデータ接続を許可する必要があるかを判断するために、FTPプロトコルの制御メッセージをスヌーピングするように設計されていた。しかし、FTP制御接続がTLS/SSLを使用して暗号化されている場合、ファイアウォールはクライアントとFTPサーバー間でネゴシエートされたデータ接続のTCPポート番号を特定できない。そのため、多くのファイアウォールで保護されたネットワークでは、暗号化されていないFTPのデプロイメントが機能する場合でも、FTPSのデプロイメントは失敗する。この問題は、データ用に限られた範囲のポートを使用し、ファイアウォールがこれらのポートを開くように設定することで解決できる。
利用するアプリケーション FTPSを利用できるアプリケーションには、以下のものが存在する。アルファベット順に列挙する。
対応クライアント Core FTP CuteFTP Cyberduck FFFTP FileZilla FireFTP (Firefoxのアドオン) FlashFXP FTP Voyager gFTP lftp NextFTP Secure FTP SmartFTP Ultimate FTP WinSCP
対応サーバー Apache FtpServer Bftpd Cerberus FTP Server CrossFTP Server DrFTPD edtFTPD FileZilla Server Independent FTP Daemon ProFTPD Pure-FTPd vsftpd War FTP Daemon Internet Information Services (IIS7以降)
脚注
外部リンク FileZilla WinSCP FFFTP Cyberduck SmartFTP NextFTP FlashFXP Advanced Technology Partner, Inc.