SSL クライアント証明書認証をサポートするにはどうすればよいですか?
-
09-06-2019 - |
質問
myopenid と同じことをしたいのですが、ログインしたら、ボタンをクリックすると SSL 証明書が生成されます。次に、ブラウザはこの証明書をダウンロードして保存します。後で yourid.myopenid.com に戻ると、ブラウザは保存されている証明書を認証に使用できるため、パスワードは必要ありません。
そこで私の質問は、これを機能させるには何が必要かということです。証明書を生成するにはどうすればよいですか?返されたメッセージを検証するにはどうすればよいですか?
私のスタックはPassengerを使用したRails on Apacheですが、あまりこだわりはありません。
解決
これらは通常、クライアント側証明書と呼ばれます。
実際に使用したことはありませんが、restful-authentication の修正バージョンはここにあります ここ それはあなたのその後のようです。
私はこれを経由して見つけました 博士。ニックさんの投稿
他のヒント
サーバーによって異なりますが、私が知っている最も簡単な解決策は、Apache を使用することです。
「このオプションを有効にすると、クライアント X509 証明書のサブジェクト識別名 (DN) が HTTP 基本認証ユーザー名に変換されます。これは、標準の Apache 認証方法をアクセス制御に使用できることを意味します。ユーザー名は、クライアントの X509 証明書のサブジェクトにすぎません (OpenSSL の openssl x509 コマンドを実行することで確認できます)。openssl x509 -noout -subject -incertificate.crt)。ユーザーからパスワードは取得されないことに注意してください...」
Rails についてはわかりませんが、通常の REMOTE_USER 環境変数には何らかの方法でアクセスできるはずです。
証明書を生成したい場合は、クライアントにキー ペアを生成させ、少なくとも公開キーを送信させる必要があります。Firefox では Javascript 呼び出しを介してこれを行うことができます。 crypto.generateCRMFRequest. 。他のブラウザでも利用できるブラウザ固有の方法があると思います。ただし、まず、公開キーを取得したら、証明書を発行する方法を理解する必要があります。
OpenSSL を使用してサーバー上で何かをスクリプト化することはできますが、Firefox が送信する CRMF 形式ではなく、CSR のサポートが組み込まれています。したがって、CRMF を CSR に変換するには、何らかのコードを記述する必要があります。これには、ある種の DER 処理機能が必要になります。ここではほんの表面をなぞっているだけです。たとえおもちゃのアプリケーションであっても、CA を操作するのは簡単ではありません。
OpenId ソリューションなどの SSO ソリューションと PKI ソリューションは重複しており、PKI には優雅さがあります。しかし、悪魔は細部に宿ります。このアプローチが長い間存在してきたにもかかわらず、政府や軍事用途でしか普及しなかったのには十分な理由があります。
これを追求することに興味がある場合は、CA サービスを開発したいプラットフォームに固有のいくつかの質問を続けてください。
ブラウザ固有のコードを使用して、クライアントのブラウザで証明書を生成できます。見る この質問
Ruby の OpenSSL を使用して、サーバー側で SSL クライアント証明書を生成することもできます (このQを参照してください)。(これはブラウザ固有のコードを必要とせずにどのブラウザでも機能しますが、サーバーがクライアントの秘密キーを生成しているため、暗号化純粋主義者にとっては理想的ではありません。)
どちらの方法を使用して証明書を生成する場合でも、クライアント証明書を要求するように Web サーバーを構成する必要があります。見る Apache ドキュメント たとえば。
私はこの問題の解決策に取り組んできました。私も同じことをしたかったし、サードパーティプロバイダーの有無にかかわらず、他の多くの Web サイト所有者がこの機能を望んでいることも知っています。
証明書ベースの認証を処理するために必要なサーバー設定と Firefox プラグインを作成しました。mypassfree.com にアクセスして、無料の Firefox プラグインを入手してください。サーバーのセットアップについては、優れたインストーラーをまだパッケージ化していないため、電子メールで私に連絡してください (そのページのリンク)。
サーバーのセットアップは Apache2 + OpenSSL + Perl (ただし、Perl スクリプトは任意の言語で書き直すことができます)
ジョナサン