web-dev-qa-db-ja.com

双方向SSLの説明

双方向SSLがどのように機能するかについては、少し混乱しています。クライアントはどのように証明書を作成してサーバーに送信しますか?サーバーから生成され、クライアントに配布されますか?

また、一方向SSLよりも双方向SSLの利点は何ですか?

68
sworded

接続前に両方の証明書が存在する必要があります。通常、認証局によって作成されます(必ずしも同じではありません)。 (検証を別の方法で実行できる別のケースもありますが、いくつかの検証を行う必要があります。)

サーバー証明書は、クライアントが信頼する(および RFC 6125 で定義された命名規則に従って)CAによって作成される必要があります。

クライアント証明書は、サーバーが信頼するCAによって作成される必要があります。

信頼するものを選択するのは各当事者次第です。

ブラウザ内で証明書を申請し、CAが発行した証明書をそこにインストールできるオンラインCAツールがあります。クライアント証明書認証を要求するサーバー上にある必要はありません。

証明書の配布と信頼の管理は、CAを介して実装される公開キー基盤(PKI)の役割です。 SSL/TLSクライアントとサーバー、そしてそのPKIの単なるユーザー。

クライアントがクライアント証明書認証を要求するサーバーに接続すると、サーバーはクライアント証明書要求の一部として受け入れたいCAのリストを送信します。クライアントは、必要に応じて適切な証明書が利用可能な場合、クライアント証明書を送信できます。

クライアント証明書認証の主な利点は次のとおりです。

  • 秘密情報(秘密鍵)がサーバーに送信されることはありません。クライアントは、認証中にその秘密をまったく漏らしません。
  • その証明書を持つユーザーを知らないサーバーは、証明書を発行した(および証明書が有効である)CAを信頼していれば、そのユーザーを認証できます。これはパスポートの使用方法に非常に似ています。パスポートを提示した人物に会ったことはないかもしれませんが、発行機関を信頼しているため、その人物にIDをリンクできます。

クライアント認証のためのクライアント証明書の利点?(Security.SE上) に興味があるかもしれません。

99
Bruno

「双方向SSL」と呼ばれるものは、通常、クライアント証明書認証によるTLS/SSLと呼ばれます。

Example.comへの「通常の」TLS接続では、クライアントのみがexample.comのサーバーと実際に通信していることを確認します。サーバーは、クライアントが誰であるかを知りません。サーバーがクライアントを認証したい場合、通常はパスワードを使用するので、クライアントはユーザー名とパスワードをサーバーに送信する必要がありますが、これは内部プロトコル(HTTPなど)の一部としてTLS接続内で発生しませんTLSプロトコル自体の一部。欠点は、サーバーにパスワードを送信するため、サイトごとに個別のパスワードが必要になることです。たとえば、PaypalとMyPonyForumで同じパスワードを使用する場合、MyPonyForumにログインするたびにこのパスワードをMyPonyForumのサーバーに送信するため、このサーバーのオペレーターはこれを傍受してPaypalで試して、自分の名前で支払いを発行できます。

クライアント証明書認証は、TLS接続でクライアントを認証する別の方法を提供します。パスワードログインとは対照的に、クライアント証明書認証はTLSプロトコルの一部として指定されます。クライアントがサーバーを認証する方法と同様に機能します。クライアントは公開秘密キーペアを生成し、署名のために公開キーを信頼できるCAに送信します。 CAは、クライアントの認証に使用できるクライアント証明書を返します。クライアントは同じ証明書を使用して異なるサーバーを認証できるようになりました(つまり、PaypalとMyPonyForumに同じ証明書を使用しても、悪用されるリスクはありません)。動作方法は、サーバーが証明書を送信した後、クライアントにも証明書を提供するように要求することです。その後、公開キーの魔法が発生します(詳細を確認したい場合 RFC 5246 )。クライアントは適切なサーバーと通信することを認識し、サーバーは適切なクライアントと通信することを認識し、両方が接続を暗号化および検証するための共通鍵素材。

36
NEOatNHNG

双方向SSLでは、クライアントはサーバーのデジタル証明書を要求し、サーバーはクライアントに同じ証明書を要求します。少し遅いですが、両方の方法があるため、より安全です。サーバーはクライアントの身元を気にしないので、通常はそれに従いませんが、クライアントは接続先のサーバーの整合性を確認する必要があります。