Secure Shell セッションは、公開鍵と証明書 (公開鍵認証の特別な形) という 2 種類のサーバ認証に対応しています。
ホスト認証のために公開鍵認証が使用される時は、以下の一連のイベントが行われます。
Secure Shell クライアントが接続を開始します。
サーバが公開鍵をクライアントに送信します。
クライアントが、信頼されているホスト鍵ストアからこの鍵を検索します。
クライアントによる鍵の検索結果 |
操作の結果 |
---|---|
ホスト鍵を見つけ、クライアントコピーが、サーバによって送信された鍵に一致する |
認証は次の段階に進みます。 |
ホスト鍵を検出できない |
クライアントは、ホストが不明であるというメッセージを表示し、ホスト鍵の指紋を提供します。ユーザが不明な鍵を受け入れることができるようにクライアントが構成されている場合 (既定)、ユーザは、この鍵を受け入れることができ、認証は次の段階に進みます。 厳格なホスト鍵の確認が履行される場合は、クライアントによって接続が終了されます。 |
ホスト鍵を見つけたが、クライアントコピーが、サーバによって送信された鍵に一致しない |
クライアントは、鍵が既存の鍵に一致しないという警告を表示し、サーバによって送信された鍵の指紋を表示します。ユーザが不明な鍵を受け入れることができるようにクライアントが構成されている場合 (既定値)、ユーザは、この新しい鍵を受け入れることができます。 厳格なホスト鍵の確認が履行される場合は、クライアントによって接続が終了されます。 |
受信した公開鍵に対応する秘密鍵をサーバが実際に保持していることを確認するために、クライアントはサーバに試行 (任意のメッセージ) を送信して、当該メッセージテキストに基づきハッシュを計算します。
サーバは、試行メッセージに基づきデジタル署名を作成します。これを行うために、サーバは別個にメッセージのハッシュを計算し、次に、サーバの秘密鍵を使用して、この計算したハッシュを暗号化します。サーバは、当該デジタル署名を元の試行に付加して、この署名付きのメッセージをクライアントに返します。
クライアントは、公開鍵を使用して署名を復号化し、クライアント自身が計算したハッシュと当該ハッシュを比較します。値が一致する場合、ホスト認証は成功します。