FTPSの場合、最初の接続時にFTPサーバーを認証するためにDNSとパブリックPKIを使用します。最初の接続では、foo.example.comは1.2.3.4に解決され、検証できる秘密キーによって暗号化された接続が返されます。検証できるのは、foo.example.comによって本当に所有されています(多かれ少なかれ、PKIの問題を考えると)。
しかし、これはSFTPでどのように機能しますか(はい、SSHであることは知っていますが、それについてはあまり詳しくありません)。
この質問に関して、人々がSFTPを使用する一般的な方法が2つあることを知っています。
その2番目のシナリオでは、最初にSFTPサーバーに接続するときに、それが本当に目的のサーバーであり、MITM攻撃を実行して自分のパスワードを取得する他のサーバーではないことを確認するにはどうすればよいですか(うまくいけば、これはハッシュされ、簡単に盗まれないでしょう)。またはデータ?
私は この質問 を見つけましたが、サーバー認証のトピックに対応していないようで、クライアント認証のみです。
SFTPは、基礎となるトランスポートとしてSSHを使用するため、SSHとまったく同じセキュリティモデルです。 SSHを使用すると、サーバーに初めて接続するときに、クライアントからサーバーのフィンガープリントが提示されます。これは次のようになります。
The authenticity of Host 'myserver.com (123.45.67.89)' can't be established.
RSA key fingerprint is 12:34:56:78:9a:bc:de:f0:0f:ed:cb:a9:87:65:43:21.
Are you sure you want to continue connecting (yes/no)? no
最高のセキュリティを確保するために、ユーザーはこのホストキー/フィンガープリントを、別の安全な帯域外チャネルを通じて取得する必要がある実サーバーのフィンガープリントと比較する必要があります。これは多くの場合、サーバーの所有者が自分の指紋を公開したWebサイトであるか、対面式の会議や電話、または以前にチェックを行った別の信頼できるユーザーによる可能性があります。 SSH自体は、この指紋の帯域外通信をどのように行うかを指定していません。
しかし、人々はしばしば、提示された指紋を信頼します。これが発生すると、SSHクライアントは通常フィンガープリントを記憶するため、今後の再接続ではユーザーにフィンガープリントの再確認を要求せずに自動的に接続し、サーバーのフィンガープリントが変更された場合、クライアントは通常大きな警告メッセージを表示します。このモデルで使用する場合、SSHのセキュリティモデルは基本的にTOFU( trust-on-first-use )です。
または、SSHは SSH証明書を使用 をサポートしてサーバーを認証します。 SSH証明書の動作は、基本的にx509証明書と同じですが、より単純で互換性のない証明書形式を使用します。 SSH証明書を使用する場合、信頼できるユーザーを認証局として割り当て、サーバーやユーザーの証明書に署名できます。この方法では、ユーザーはすべてのサーバーのホストキーを個別に検証するのではなく、単一のCA証明書をインストールするだけで済みます。
Lie Ryanの優れた回答に加えて、sshホストキーは、SSHFPエントリを使用してDNSで公開することもできます。ゾーンがDNSSECで正しく構成されていて、リゾルバーがDNSSECをサポートしている場合は、ssh_config
ファイルで VerifyHostKeyDNS
オプションをyes
に自動的に設定することもできます。それを信頼します(一般のPKIの場合と同様)。