2008-08-26 15 views
9

私はmyopenidのやりたいことをしたい - あなたがログしたら、あなたはSSL証明書を生成するボタンをクリックすることができます。ブラウザはこの証明書をダウンロードして保存します。後でyour.myopenid.comに戻ってくると、ブラウザはその証明書を認証に使用してパスワードを必要としません。SSLクライアント証明書認証をサポートするにはどうすればよいですか?

私の質問はこれを動作させるために必要なものですか?証明書を生成するにはどうすればいいですか?彼らは私に戻って提示されたらどのようにそれらを検証するのですか?

私のスタックはPassengerを使ったApache on Railsですが、私はそれほど特別ではありません。

答えて

8

これらは、通常、クライアント側の証明書と呼ばれます。

私は実際には使っていませんが、安静認証の修正版はここではhereのように見えます。

私はDr. Nic's post

2

経由でこれを見つけたは、Apacheを使用して、サーバーに依存しますが、私の知っている最も簡単な解決策:

このオプションを有効にする

FakeBasicAuth

」、クライアントX509証明書のサブジェクト識別名(DN)はHTTP基本認証ユーザー名に変換されます。つまり、アクセス制御に標準のApache認証方法を使用できます。ユーザー名は、クライアントのX509証明書のSubject(OpenSSLのopenssl x509コマンド(openssl x509 -noout -subject -in certificate.crt)を実行して決定できます)です。パスワードがレールわからない」...ユーザーから

を得られませんが、通常のREMOTE_USER環境変数が何らかの方法でアクセス可能でなければならないことに注意してください。

1

証明書を生成したい場合は、あなたが必要としますクライアントに鍵ペアを生成させ、公開鍵を少なくとも送信してください。これはFirefoxでJavascript呼び出し(crypto.generateCRMFRequest)で行うことができます。他のブラウザでも利用可能なブラウザ固有のメソッドがあります。まず、公開鍵を取得したら証明書を発行する方法を理解する必要があります。

OpenSSLでは、CSRのためのサポートが組み込まれていますが、Firefoxがあなたに送るCRMF形式ではありません。したがって、CRMFをCSRに変換するためのコードを書く必要があります。これには、DER処理機能とhellipが必要です。私はちょうどここで表面を傷つけています—、おもちゃのアプリケーションのためにCAを操作することは自明ではありません。

OpenIdとPKIソリューションのようなSSOソリューションは重複しており、PKIには優雅さがあります。しかし悪魔は細部にいて、このアプローチが長い間行われていたが、政府や軍事的なアプリケーションでしか進まなかった理由がある。

これを実行することに興味がある場合は、CAサービスを開発するプラットフォームに固有のいくつかの質問にフォローアップしてください。

+0

代わりに、代わりにkeygen要素を使用できます。http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#the-keygen-element – hendry

0

私はこの問題の解決に取り組んできました。私は同じことをしたいと思っていました。他の多くのウェブサイトの所有者が、サードパーティプロバイダの有無にかかわらず、この機能を必要としています。

証明書ベースの認証を処理するために必要なサーバーセットアップとfirefoxプラグインを作成しました。 mypassfree.comにアクセスして無料のFirefoxプラグインを入手してください。すばらしいインストーラでまだパッケージ化していないので、私にメールを送ってください(そのページのリンク)。

Serverのセットアップは、Apache2の+のOpenSSL + Perlのである(ただし、任意の言語でPerlスクリプトを書き換えることができ)

ジョナサン

0

あなたは、ブラウザ固有のコードを使用して、クライアントのブラウザに証明書を生成することができます。 this question

Ruby(see this q)でOpenSSLを使用してサーバー側でSSLクライアント証明書を生成することもできます。 (これはブラウザー固有のコードなしですべてのブラウザーで動作しますが、サーバーはクライアントの秘密鍵を生成しますが、これは暗号の純粋さには適しません)。

どの方法を使用して生成するかは、クライアント証明書を要求するようにWebサーバーを構成します。例については、the Apache docsを参照してください。

+0

CSRの生成ほとんどの一般的なブラウザ(IE、FF、Chromeなど)で動作しますが、コードはブラウザ固有の傾向があります。この回答を参照してください:http://stackoverflow.com/a/9198400/372643 – Bruno

+0

偉大な答え、ブルーノ - 私はそれがここに現在よりもこのqへのより良い答えだと思います:-) – Rich

関連する問題