自分のコンピューターとサーバーの間に SFTP 接続を設定したい。
私は自分のコンピューターでキーのペアを生成し、サーバーの「authorized_keys」ファイルに公開キーを書き込みました。私の秘密キーを持っていないコンピューターから接続しようとすると (他の人は誰も持っていないはずですが)、パスワードが求められるので、これは機能するはずです。
によるとこの画像私のサーバーは Bob で、コンピューターは Alice です。サーバーがメッセージを送信するとき、サーバーは私の公開鍵を使用してメッセージを暗号化し、私は私の秘密鍵を使用してメッセージを復号化します。しかし、私がサーバーにメッセージを送信した場合、そのメッセージは暗号化されません。暗号化されている場合、どのように暗号化されるのですか?
非対称暗号化について私が理解していることからすると、送信するメッセージを暗号化したい場合は、サーバー上でキーのペアを生成し、その公開キーを自分のコンピューターの「authorized_keys」ファイルに格納する必要がある、ということでしょうか?
どうやって確認する接続は双方向(送信と受信)で保護されていますか?
ありがとう!
答え1
SSH 接続では主に 2 つのことが起こります。
サーバー認証と暗号化
サーバーは公開鍵を送信し、それを信頼する必要があります。その前に手動で取得することもできますし、理想的なセキュリティ環境では、公開鍵が正しいことが分かるまで SSH サーバーに接続することはありません。これが CA の目的です。CA はサーバーの公開鍵に署名します。ほとんどの SSH 環境では、クライアントとしてサーバーの公開鍵を受け入れるだけです。これが最初の「このサーバーを信頼してリストに追加しますか?」という質問です。Linuxシステムのクライアントでは、サーバーの公開鍵は.ssh/known_hostsに保存されます。。
接続の実際の暗号化は非対称ではありません。 これは多くの人が秘密鍵/公開鍵暗号化について抱いている大きな誤解です。それは非常に遅いでしょう。実際には、サーバーとクライアントが共有の秘密(つまり長いパスワード)を生成し、それが対称暗号化この 1 回のセッションでのみ有効です。クライアントとサーバーは、共有秘密に同意するまでは非対称暗号化を使用します。その後、この共有秘密をキーとして対称暗号化に切り替えます。
このタイプの暗号化は最も一般的であり、ハイブリッド暗号化ただし、ほとんどの人は(誤って)これを非対称暗号化と呼んでいます。
「本物の」純粋な非対称暗号化の例としては、すべてのメッセージが非対称的に暗号化される PGP によるメール暗号化があります。
また、共有シークレットは永続的に保存されるわけではなく、新しいセッションごとに新しい共有シークレットがネゴシエートされます。
クライアント認証
これは全く別の話で、パスワードやキーベースの認証になります。クライアントの公開鍵(~/.ssh/id_rsa.pub にあります)は、サーバーの authorized_keys ファイル(たとえば、ルートの場合は /root/.ssh/authorized_keys)に存在していなければなりません。以前は、ssh-copy-id
次のようなことをしていました。
cat ~/.ssh/id_rsa.pub | ssh root@server "cat >> ~/.ssh/authorized_keys"
サーバーの authorized_keys にキーを追加します。
クライアント証明書は暗号化には使用されず、認証にのみ使用されます。
重要編集:誤解を防ぐために、投稿をより明確にしましたssh-copy-id
。
現時点では、ssh-copy-id
クライアントの公開キーをサーバーに追加するベスト プラクティスの方法です。私は、cat
両側でどのファイルが操作され、秘密キーと公開キーの関係とそれらの保存方法を示す方法を投稿しました。
catを使う場合、「>」を忘れるリスクがあります。例えば、上書きするauthorized_keys ファイル (Linux では ">>" は追加、">" は上書きを意味します)。設定ファイルを直接操作する場合は責任を持ってください。指摘してくださった @Rallph に感謝します。
答え2
サーバーには独自のキー ペアがあります。SSH サーバーに初めて接続する場合、サーバーのホスト キー (公開キー) を信頼するかどうかを SSH/SFTP クライアントから確認するメッセージが表示されます。
それがサーバーの正当な公開鍵であることを慎重に検証した後でのみ、接続は安全です。私の記事サーバーを認証するための SSH ホスト キーのフィンガープリントはどこで入手できますか?
また、データの暗号化には、あなたのキー ペアもサーバーのキー ペアも実際には使用されないことに注意してください。これははるかに複雑です。
参照: