アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング ネットワーク 基盤技術

ftp, ftps, sftpの違い

投稿日:

開発対象システムの連携先システムとして、ftpsやらftpsサーバが指定される場合がある。
私の場合、開発標準の役割を担う場合が多く、これらの仕様を把握し、動作確認や単体テスト用のダミーのサーバを用意する必要がある。そのための前提として、ftpと名のつくプロトコルの概要を整理した。

FTPSはSSL/TLSを使って通信路を暗号化したFTP拡張、SFTPはSSHプロトコルをベースにしたFTPとは異なるファイル転送プロトコルです。覚え方としては「sで始まるのはssh系、ftpで始まるのはftp系の実装」という感じですかね。
サーバ構築では、ssh系はOpenSSHサーバ、ftp系はIIS(Windows)やvsftp(CentOS7)等のポピュラーなFTPサーバで実現できます。

プロトコル 説明 通信プロトコル/
ポート番号
対応RFC
(公開年)
ftp File Transfer Protocol:
インターネット初期から存在するファイル転送プロトコルであり、様々なアプリやツールで実装されている。
データ通信の内容が暗号化されないため、使用される場面は限定的。
セキュリティが求められる場面では、後述のftpsやsftp等の別のプロトコルが使われる。
なお、パッシブモード(PASV)が定められたのはRFC1579(1994)である。
制御用: TCP/21
データ転送: TCP/*
RFC114(1971)
RFC765(1980)
RFC959(1985)
RFC1579(1994)
RFC2228(1997)
RFC2428(1998)
ftps
(explicit)
File Transfer Protocol over SSL/TLS:
SSLまたはTLSを使ってFTPの通信内容を暗号化するFTP拡張。
クライアントがFTPサーバに接続後、AUTHコマンドを使って明示的(explicit)にSSL/TLSの通信を始める(*1)。
クライアントがAUTHを使わない場合、通常のFTPとして機能する。サーバから強制することも可。
制御用: TCP/21
データ転送: TCP/*
RFC2228(1997)
RFC4217(2005)
ftps
(implicit)
File Transfer Protocol over SSL/TLS:
ftps(explicit)とは異なり、最初から暗黙的(implicit)にSSL/TLSで通信を始めるFTP拡張。
ftps(explicit)と同様にRFC4217で検討が進められたが途中で削除されており、正式なRFCはない。
制御用: TCP/990
データ転送: TCP/*
(なし)
sftp SSH File Transfer Protocol:
SSHプロトコルによる安全な接続上でファイル転送を行うプロトコル。
ファイル転送にFTPを使っているわけではなくsftp独自の実装であり、SSHサーバの標準機能になっている。
ベースとなるSSHは1995年にSSH社が開発しフリー公開され、デファクトスタンダードとなった。後から(2006年)にSSHプロトコルや関連技術がRFC4250/4251/4252/4253/4254/4255/4256として制定された。sftpは2006年に”SSH File Transfer Protocol”としてドラフトが投稿されているが有効期限切れ状態(*2)になっており、2019年時点でRFCはない。
TCP/22 (なし)
参考
tftp
Trivial File Transfer Protocol
最低限ファイル転送を行えるように単純化されたFTPプロトコル。
ネットワーク経由でのOSインストール(BOOTP, PXE)や、ファームウェアのインストール、等の限定された場面で使用され、組織内ネットワークでの使用が主。サーバやルータ等の機器に容易に組み込みできるよう、TFTPは小型で実装が容易になるような設計になっており、認証や転送データの信頼性を担保するような機能は除外されている。
UDP/69 RFC783(1981)
RFC1350(1992)
RFC1782(1995)

*1: 通信の途中から通信内容の暗号化を開始するSTARTTLSという仕組み。既存プロトコルのポート番号を変更せずに暗号化ができるメリットがあり、SMTP, IMAP, POP3等でも使われる。
*2: IETF Datatrackerで、検索条件として”Additional search criteria”で[RFC][Internet-Draft (active)][Internet-Draft (expired, replaced or withdrawn)]を選択し、[SSH File Transfer Protocol][sftp]等で検索する。



(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, ネットワーク, 基盤技術

執筆者:

関連記事

開発・検証用のダミーメールサーバの構築(fakeSMTP)

アプリ開発や検証等でメールサーバを利用したい場合がある。 プロジェクトで共有の検証用メールサーバを構築できると効率が良いか、その準備が間に合わなかったり、使用者が限定的な場合は、使用者の開発環境上に構 …

WebサイトのSSL化

次のようなGoogleウェブマスター向け公式ブログでの推奨や、リモートか管理の安全性向上の向上のためにSSL(TLS)を有効にする。 概要 Googleさんの考え 保護されたウェブの普及を目指して(2 …

CentOS7のマルチホーム化

サイトの存在を隠しつつも、sftpサーバを公開し、後輩と1G以上のファイルのやりとりしたい。 パブリック側のIPアドレスを教えてしまうと、どこのサーバだろうかとブラウザで開いたりするとサイトの存在がわ …

JavaでのZIP暗号化の考察

法務系業務を行うシステムを設計するにあたり、次のような要件がありました。 CSVファイルの暗号化方式として、当初からパスワード付きZIPファイルの使用を検討していたため、ZIP圧縮を使用する前提で調査 …

Wildflyでリクエストをダンプする

Webアプリのデバッグや障害対応等で、Webアプリに対するリクエストやレスポンスのHTTPヘッダや内容を確認したい場合がある。 次のような場面ではクライアント側での確認ができないため、今回のようにAP …

プロフィール ゆっきーです。
都内でシステムエンジニアをやっています。
もっと詳細を見る