web-dev-qa-db-ja.com

openssl ECDHE-RSA ... RSAサーバー証明書とECDSAクライアント証明書の使用中に選択された暗号スイート

シーン:

  • rSA証明書を使用するs_server。
  • eCC-ECDSA証明書を使用するs_client。

クライアント認証が必要です(s-serverにオプション-Verifyを設定)

ハンドシェイク後に選択された暗号スイートはECDHE-RSA-AES256-GCM-SHA384です。

したがって、証明書のタイプ(RSA-DSA)が選択された暗号スイートにどのように影響するか(暗号スイートの認証部分に関して)は完全には理解できません。

サーバーの証明書が使用する認証のタイプを設定している可能性がありますか?

誰かがサーバー/クライアント証明書が暗号スイートの選択にどのように影響するか説明できますか?

6
jpradas

「ECDHE」とは、鍵交換が、新しく生成されたDH要素で(楕円曲線上の)Diffie-Hellmanアルゴリズムを使用することを意味します。最後の「E」はephemeralを表します。そのため、DHは共有キーを生成しますが、ランダムに生成された値で動作し、DHの何も保証しませんauthentication:クライアントには、それが見るDH公開鍵は、意図したサーバーに実際に属しています。

サーバー認証を元に戻すには、何か他のものが必要です。これは署名です。サーバーは、DH鍵交換の半分にデジタル署名します。その署名はサーバーの証明書にある鍵を使用するため、署名アルゴリズムはその鍵のタイプによって異なります。 「ECDHE-RSA」では、「RSA」の部分がその署名に関連しています。RSAタイプであることを示しています(もちろん、サーバーの証明書に対応するRSA公開鍵が含まれていることを意味します)。

client認証にはそのようなメカニズムはありません。サーバーがクライアント証明書を要求すると、クライアントは署名を計算し、その公開鍵を(証明書の一部として)送信する必要がありますが、そのクライアント証明書タイプと暗号スイートの間には関係がありません。その理由は次のとおりです。

  • クライアント証明書は、ハンドシェイクの後の暗号スイートの選択後に表示されます。暗号スイートが選択されている場合、クライアントはクライアント証明書が要求されるかどうかをまだ知りません。

  • SSLサーバーは、一般に、全世界に応答できなければなりませんが、クライアントが接続すると、どのサーバーと通信しているかがわかります。結果として適切な証明書を選択できます(サーバーは、クライアントの選択を絞り込むためにCA名のリストも送信します)。クライアント証明書は、Webコンテキストではまれです。一般的に、SSLサーバーは、クライアントがすでに適切なタイプの証明書を持っていることを知っている場合にクライアント証明書を要求します(たとえば、銀行サーバーは、顧客が銀行の配布を保証するプログラムに参加している場合にのみ顧客の証明書を要求します上記の証明書)。したがって、クライアント証明書タイプの動的ネゴシエーションは必要ありません。

暗号スイートの選択は、両端でサポートされるalgorithmsを選択することに関するすべてです。サーバーが署名する必要があり、クライアントが検証する場合、クライアントは署名アルゴリズムを理解できる必要があり、したがってその鍵タイプを理解できる必要があります。

実際には、クライアントはサポートされている暗号スイートのリストを送信し、サーバーはそれらの1つを選択します。もちろん、暗号スイートはサーバーが使用するアルゴリズムと鍵のタイプに対応しています。理論的には、クライアントによって送信されたリストは「優先順位」によって順序付けされ、サーバーはその順序を尊重することになっています。つまり、サーバーの機能にも適合するクライアントリスト内の最初の暗号スイートを選択します。すべてのサーバーが丁寧であるとは限りません。

SSL/TLSの概要については この回答 を参照してください。

8
Thomas Pornin