2

Java Web アプリの一部として、ブラウザー証明書を介してクライアント認証を実装しようとしています。クライアントとサーバーで証明書を生成してインストールする方法に関する情報を見つけることができました。

アクセスに関して、私が見つけることができるすべての情報は、www.mydomain.com/securearea などの特定のパスへのアクセスを構成し、サーバーにアクセスを処理させることに関するものです。

ただし、ブランケット アクセス ブロックではなく、ユーザーが有効なクライアント証明書を提示するかどうかに応じてカスタム動作を実装したいと考えています。基本的に、 hasValidClientCertificate()のようなメソッドを作成できるようにしたい

残念ながら、クライアントが Java で有効な証明書を持っているかどうかをプログラムで確認する方法についての参照を見つけることができません。私はトムキャットを使用しています。これは私の得意分野ではないので、ヒントやアドバイスをいただければ幸いです。

お時間をいただきありがとうございました

ポール

4

1 に答える 1

1

いくつかの手順を実行する必要があります

1) クライアント証明書認証を実行するように tomcat を構成します (server.xml 内)。

<Connector port="8443" 
protocol="HTTP/1.1" 
SSLEnabled="true"          
maxThreads="150" 
minSpareThreads="25" 
maxSpareThreads="75"
enableLookups="false" 
disableUploadTimeout="true"
acceptCount="100" 
keyAlias="tomcat"
debug="0" 
scheme="https" 
secure="true"
clientAuth="want" 
sslProtocol="TLS" 
keystoreFile="server.keystore" keystorePass="changeit" 
truststoreFile="trust.keystore" truststorePass="changeit"/>

clientAuth 属性に関するhttp://tomcat.apache.org/tomcat-7.0-doc/config/http.htmlからの明確化:

SSL スタックがクライアント証明書を要求するが、クライアント証明書が提示されなくても失敗しないようにする場合は、wantに設定します。

SSL 用に Tomcat を構成する方法について詳しくは、Tomcat 認証を参照してください: http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html

2) 次のコードを使用して hasValidClientCertificate() を実装します。

X509Certificate[] crts = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");
if (crts!= null && crts.length > 0) {
    return true;        
}

3) ユーザー証明書にアクセスする必要がある場合は、アクセスしてください。

X509Certificate userCert = crts [0];
于 2013-03-18T19:26:45.553 に答える