1

Webアプリケーションでクライアントの証明書ベースの認証を使用することを計画しています。ここで、クライアントから提供された証明書から情報を取得する方法が必要です。

サーバー側でそれを行うにはどうすればよいですか?サーブレットコンテナ(Tomcat)は証明書を検証し、 HttpServletRequest.getUserPrincipalにプリンシパルを入力すると思います

他に考慮すべきことはありますか?

4

2 に答える 2

2

これは本当に証明書に依存します。共通名、組織など、サーバー側で証明書のさまざまなフィールドを調べることができます。多くの場合、証明書の共通名は(Webサーバーの場合)証明書が作成されたドメイン名です。本当に証明書だけに基づいてユーザーを識別したい場合は、証明書の生成自体を制御し、証明書の自動化によって入力する内容を指定する必要があります(つまり、証明書に署名する人ではなく、証明書を作成する人) )どのフィールドで。たとえば、共通名フィールドにusername.www.yourwebsite.comを入力して、共通名を一意にするだけでなく、その中にユーザー名を含めることで、証明書作成者に同意することができます。ただし、これは、証明書の作成を制御する場合にのみ可能です。

私たちが自分たちでしたことは、証明書フィールド自体の情報に依存していません。1つの特定の認証局を信頼し、クライアント証明書からの拇印を検査し、証明書の拇印をユーザーにマッピングする独自のテーブルを用意しています。次に、Webサーバーは、クライアントが信頼できる認証局によって署名された有効な証明書を提示しているかどうかのみを確認し、証明書が有効である場合は、マッピングテーブルで拇印を検索します。

于 2012-10-04T10:32:12.017 に答える
2

これはApache+Tomcatで行います。Apacheは、 SSLOptionsを使用して証明書データのCGI変数を作成できます。

SSLOptions +ExportCertData

Tomcatは、そのデータをすべての要求属性に追加します。次を使用してデータを取得できます。

X509Certificate x509[] = (X509Certificate[]) 
    request.getAttribute("javax.servlet.request.X509Certificate");

Tomcatがクライアント証明書を単独で処理する方法はわかりませんが、このようにすると信頼性が高くなります。

于 2012-10-04T10:33:30.133 に答える