SSL証明書を使用してWebブラウザを認証することは可能ですか.
アプリケーションに秘密鍵を保存するとします。ブラウザから鍵を読み取り、それに基づいて認証を試みる方法はありますか?
SSL証明書を使用してWebブラウザを認証することは可能ですか.
アプリケーションに秘密鍵を保存するとします。ブラウザから鍵を読み取り、それに基づいて認証を試みる方法はありますか?
SSL/TLS クライアント証明書認証を使用して、ブラウザー/ユーザーを認証できます。
クライアント証明書はサーバーによって要求される必要があるため、サーバー構成にアクセスする必要があります (共有サーバーに PHP コードをインストールするだけではありません)。これは SSL/TLS レイヤーで行われます (実際、このメカニズムは HTTPS に固有のものではありません)。サーバーは SSL/TLS ハンドシェイク中にクライアント証明書を要求します (再ネゴシエートされたハンドシェイクを介することもあります)。Apache Httpd では、これは通常、経由で行われSSLVerifyClient
ます (ただし、他のオプションも指定する必要があります)。
次に、サーバーは、証明書を構成した CA (おそらく独自のもので、サーバー証明書自体に使用されている CA とは無関係) に対して証明書を検証します。(代わりに、場合によってはサーバー レベルで証明書の検証を無効にして、PHP アプリケーションにそれを行わせることもできますが、これは少し高度であり、自分が何をしているのかを知る必要があります。)
アプリケーションからクライアント証明書にアクセスし、そのサブジェクト DN (または代替名) を取得して、クライアントを識別できます。
ブラウザを識別した後なのか、ユーザーを識別した後なのかは明らかではありません。結局、とにかくすべてがブラウザーを通過しますが、クライアント証明書はユーザーに割り当てられる傾向があります。ユーザーは、その証明書をブラウザーにインストールする必要があります。
編集:詳細については、質問とこれをどうするつもりかを明確にしていただければ助かります。
SSL証明書を使用してWebブラウザを認証することは可能ですか.
アプリケーションに秘密鍵を保存するとします。ブラウザから鍵を読み取り、それに基づいて認証を試みる方法はありますか?
まず、厳密に言えば、「SSL 証明書」というものはありません。SSL/TLS には複数の種類の証明書を使用でき、これらの同じ証明書のいくつかは SSL/TLS 以外の目的にも使用できるためです。通常、「SSL 証明書」は「SSL/TLS のコンテキストにおける X.509 証明書」を意味します。
したがって、SSL 証明書を使用して Web ブラウザーを認証することは、SSL/TLS レイヤーで行うことを意味します。(HTTP レイヤーで X.509 証明書を使用してメッセージ レベルのセキュリティを実装する試みがありましたが、ブラウザーで広くサポートされているわけではありません。)
第 2 に、秘密鍵は、認証するリモート パーティによって保持されます。リモート パーティを認証するローカル パーティには、秘密鍵は表示されません。(サーバーとして) Web ブラウザーを認証したい場合、(おそらく PHP) アプリケーションではなく、秘密鍵を持つ必要があるのはブラウザーです。このコンテキストでは、(PHP?) アプリケーションが、認証したいブラウザーである場合に、なぜ秘密鍵を持っている/必要とするのかは明確ではありません。
検証アプリケーションが必要とする可能性があるのは (サーバー自体によって行われない場合)、提示されたクライアント証明書を検証できる CA 証明書 (または、少なくともクライアント証明書を検証するための何らかの形式のトラスト アンカー) です。アプリケーションを CA にしたい場合を除き、ここでは秘密鍵は必要ありません。公開鍵と証明書だけです。
実際、アプリケーションをミニ CA にすることもできます。ブラウザにキー ペアを生成させ、証明書要求をサーバーに送信させることができます (ブラウザにすべてを実行させる Web ページを作成するメカニズムがあります)。次に、サーバーは証明書を生成し、ブラウザーに秘密鍵に対してそれをインポートさせます。その後、ブラウザはこの証明書を使用して、そのサーバー (またはこれらの証明書を認識する他のサーバー) との認証を行うことができます。
いいえ、それはできません。
いくつかの開発が進行中であり、数日前に W3C が暗号化標準の提案を行いました。
ただし、キーを Cookie に入れ、それを使用して識別できます。これはデフォルトの PHP セッション ID の動作です。