- 締切済み
ブラウザのキーストアの個人証明書をつかって認証
HTML5で、<keygen >というタグによって公開鍵ペアの証明書が発行される機能で、あるサイトの認証をしたいのですが、できますでしょうか。 試しましたらフォームで送信処理すると、公開鍵はPOSTで送信され、秘密鍵はブラウザのなかに保存されました。 ということは、このブラウザで、あるサイトをアクセスしたとき、POSTで送った公開鍵を登録したサイトが閲覧でき、登録していない場合はアクセスできないという仕組みを作ることはできるんでしょうか。 できるのでしたらその方法を知りたいので、参考になる本とかウエブサイトがあれば教えてほしいです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kadusaya2
- ベストアンサー率48% (114/235)
仮に Apache + OpenSSL を使っているものとして、概略だけ説明します。 1.OpenSSLで自分で認証局を構築します。 2.ブラウザが作成するのは証明書ではなくCSRです。ブラウザはCSRを送ってくるので、構築した認証局で証明書を発行します。 3.ブラウザは証明書をOSの中に格納します。ブラウザ自体は証明書を保持しません。 OSにログインするアカウントが替われば、証明書の信頼チェーン(キーストア)自体が切り替わります。 必要であればUSBトークン↓などに鍵ペアと証明書を格納します。 http://www.ftsafe.co.jp/products/epass 4.サイトは、ssl.confの中のSSLCACertificateFileで証明書を発行した認証局のルート証明書を指定します。同様にCRLをSSLCARevocationFileで指定します。 5.SSLVerifyClientでrequireを指定すれば、サイトにアクセスしたときにブラウザが証明書を送ってくるので、SSLRequireで正しい証明書か判定します。 もしくはSSLOptionsでExportCertDataを指定して、JAVAやPHPで証明書を判定します。 以上です。
補足
ちょっと違うような気がしますので、補足します。 SSL通信の証明書のことではありません。SSLのサイトは作ったことがあるのでその仕組みは知っています。 フォームタグに、HTML5の<keygen keytype="rsa" ... />を挟んで送信すると、鍵ペアを作成していますというメッセージが出てきて、公開鍵がPOSTされます。同時に、秘密鍵はどこかなと探したら、実行したプラウザのオプションの「個人証明書」というところに登録されていました。 よって、そのブラウザには秘密鍵(これを証明書と呼ぶのかどうかは知らない)があるのだから、POSTで送られてきた公開鍵をどこかのサーバーに置けば、そのサーバにアクセスできるのは、先のフォームを実行したブラウザだけとなるはずです。 で、その公開鍵をどこにどういう方法で設定すればいいのかを知りたいのです。 説明不足ですみません。