https 接続を成功させるには、クライアント (Java、C++ など) に有効なデジタル証明書が必要ですか?

StackOverflow https://stackoverflow.com/questions/1001078

  •  05-07-2019
  •  | 
  •  

質問

サーバーに対して https リクエストを行う小さなスタンドアロン プログラムを実装する予定です。クライアントに有効な SSL 証明書が必要ですか?この場合、SSL ハンドシェイクはどのように機能しますか?SSL証明書がないクライアントにセキュリティ上の問題はありますか?

役に立ちましたか?

解決

ネットワーク トラフィックの暗号化とは別に、HTTPS は通常、サーバーの認証に使用されます。つまり、サーバーの所有者などに関する安心できる情報をクライアントに提供するためです。これが機能するには、クライアントはサーバーによって発行された証明書の信頼チェーンを検査する必要があります。これを自動的に行うには、サーバーの証明書を発行した証明機関を記述する証明書がクライアント マシンにインストールされている必要があります。通常、このような証明書はマシン上の「信頼されたルート証明機関」と呼ばれるストアにあり、ほとんどの OS には共通の CA のセットがすでにインストールされています。

さらに、多くの Web サーバーは、クライアント証明書を提供することでクライアントがサーバーに対して自身を認証できる機能を提供します。Web サーバーは、クライアントから送信された証明書を検査し、それをサーバー上の一連の権限にマッピングできます。この「クライアント認証」は、HTTPS セッションが動作するためには必要ありませんが、単なるオプションです。

要するに、実際にはそうではありません 必要 クライアント上の任意の証明書ですが、おそらく 欲しい サーバーの ID を検証するためにルート CA 証明書が必要です。その証明書を持っていない場合、サーバーを信頼することはできません (そうする正当な理由がない限り) が、とにかくサーバーとデータを交換することを選択することもできます。

他のヒント

HTTPS ハンドシェイクとネゴシエート内容について詳しく知りたい場合は、moserware にあるこの優れた記事を参照することを強くお勧めします。

http://www.moserware.com/2009/06/first-few-milliseconds-of-https.html

クライアント証明書は、サーバーが必要とする場合にのみ必要です。クライアント証明書を使用すると、サーバーはクライアントを認証できますが、これが役立つのは、サーバーがすべての許可されたクライアントのリストを持っている場合のみです。通常、Web サーバーには当てはまらないため、クライアント証明書が必要になることは非常にまれです。

クライアント側の証明書が存在する場合、セキュリティで保護されたチャネルの確立には影響しません。(そのために必要なのはサーバーの証明書のみであり、クライアント証明書を混合に追加してもプロセスは変わりません。) 安全なチャネルが確立されると、サーバーはクライアントの証明書を使用してクライアントを認証します (通常はクライアントのパブリック証明書を比較することによって)キーまたは名前と許可されたクライアントのリスト)。

HTTPS 接続を確立するために証明書は必要ありませんが、通信相手を知りたい場合は証明書が必要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top