SFTPサーバーに接続するときは、クライアント認証に公開鍵と秘密鍵のペアを使用できます。クライアントがサーバーからの公開鍵も検証するように、相互認証も可能ですか?
私のクライアントとSFTPサーバーはどちらもLinuxボックスです。 ssh-keygen
クライアントのキーペアを生成し、次にssh-copy-id
サーバーにクライアントの公開鍵を提供します。これはサーバーからクライアントに逆も機能しますか?クライアントサーバーへのアクセスをsysadminに要求する必要があるため、今はテストできません。
認証には、ユーザー名とパスワード、およびキーベースの認証という2つの主要な形式があります。
また、クライアントがSSHデーモンに接続するときに、信頼できるデータベースにあるフィンガープリントを比較して信頼できる公開鍵が変更されていないことを確認する認証チェックも行われますknown_hosts
、およびサーバーが提示するもの。これらが一致する場合、接続は継続し、サーバーは認証を要求し、検証されると、完全なセッションが確立されます。
SSHについて説明する前に、一般的な実装での相互認証について説明しましょう。 TLS相互認証は、サーバーとクライアントの両方に証明書を提示し、身元を確認します。これは、APIエンドポイントなどのB2Bアプリケーションで一般的に使用されます。これにより、IDの認証を提供しながら、PKI(転送中の暗号化、整合性チェック、およびCRLおよびOCSPレスポンダによる失効)の利点を提供します。
デフォルトでは、これは機能しません。 SSHクライアントはSSHデーモンに接続します。これには、サーバーがクライアント上にクライアント資格情報を持っている必要があります。混乱していますか?一歩戻りましょう。
ユーザー(あなた)-> SSHキー->サーバー
これは正常な動作です。それを裏返して、逆に信頼を確立したいのです。
サーバー->別のSSHキー->ユーザー(あなた)
これは危険です。理由はいくつかあります。
サーバーが侵害されると、企業のデスクトップネットワークやユーザーのホームネットワークにピボットできるようになります。どちらの状況も壊滅的です。
企業のACLは、これが発生するのを許可する必要がありません。これにより、ピボットとデータの引き出しが攻撃者にとってはるかに簡単になります。
これは可能ですが、ほとんど行われず、危険です。
SFTPサーバーで次のコマンドを実行した場合(正しいパスを想定)
_ssh-keygen -l -f /etc/ssh/ssh_Host_rsa_key.pub
_
次のような出力が表示されます。
2048 7c:d9:68:a7:de:ad:26:12:34:56:78:00:4a:9b:a2:b9 root@localhost (RSA)
このハッシュ文字列をクライアントに保存すると、最初に接続したとき、または次のメッセージが表示されたときにそれを比較できます。
_The authenticity of Host 'localhost (::1)' can't be established.
RSA key fingerprint is 3e:34:de:ad:55:55:55:66:89:ab:41:de:ad:46:20:16.
Are you sure you want to continue connecting (yes/no)?
_
次に、2つのハッシュを手動で比較できます。ハッシュが異なる場合は、正しいサーバーに接続していないかどうかがわかります。
注:初めて正常に接続すると、接続するたびにクライアントがこの比較を処理し、そのデータを_.ssh/known_hosts
_ファイルに保存して比較します。
とはいえ、サーバーキーのハッシュを事前に知っていれば、クライアントユーザーは正しいサーバーに接続していることを確認できます。
IS定義済み hostbased
ssh
プロトコルに認証方法があり、基本的には問題の内容を実行します。
このメソッドは明示的に許可する必要があります:
HostbasedAuthentication yes
EnableSSHKeysign yes
ssh_config
だけでなく、サーバー上でも(ただし、すべての人に適しているわけではありません。検証済みのDNS名が適切なスタートです):
Host *.trusted.example.org
HostbasedAuthentication yes
EnableSSHKeysign yes
次に、ピアの有効な公開鍵を使用して、クライアントとサーバーのknown_hosts
ファイルに既知のグローバルホストを設定します(基本的にはauthorized_keys
に置き換えられます)。
最後は/etc/shosts.equiv
で、誰がどこからログインできるかを制限します。
私はそれが良い習慣であり安全であることを言っているわけではありませんが、それは exists です。ただし、ssh証明書を使用する方がはるかに優れています。