B2BであるWebサービスのSSL接続をセットアップしようとしていますが、サーバーでクライアント認証を行う必要があります。サーバーは、通常のユーザーからブラウザーを介してアクセスできるURLをホストするため、ホストへのすべての接続でclient-authを実行する必要はありません。特定のURLのみが、呼び出し元のX509証明書を検証するためにclient-authを必要とします。Tomcat5.xに基づくJBoss5.xを使用しているので、次のようなコネクタ構成があります。
<Connector protocol="HTTP/1.1" SSLEnabled="true"
port="8443" address="${jboss.bind.address}" sslProtocol = "TLS"
scheme="https" secure="true" enableLookups="true" clientAuth="false"
keystoreFile="${jboss.server.home.dir}/conf/.myKeyStore"
keystorePass="password1" />
ご覧のとおり、署名付き証明書を提供できるようにキーストアを構成し、client-authを必要とする特定のURLが次のようにweb.xmlで構成されるため、clientAuth=falseを使用します。
<security-constraint>
<web-resource-collection>
<web-resource-name>clientAuthResources</web-resource-name>
<url-pattern>/clientauth/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>authOnly</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>myRealm</realm-name>
</login-config>
<security-role>
<role-name>authOnly</role-name>
</security-role>
カスタムJAASログインモジュールを介して、上記のコネクタ構成でこれを実際に機能させることができます。また、クライアント証明書を持つトラストストアを指定します。それが私の問題です。アプリケーションのセットアップとスケーリングの方法を考えると、各jbossアプリケーションサーバーのセットアップはユーザーの特定のセジェンテーションをサポートしており、ファイルシステムのいたるところにトラストストアを設定したくありません。信頼できる証明書をデータベースからコードに動的にロードする必要があります。カスタムJAASログインモジュールはこれをWebレベルで実行し、役割も割り当てますが、コネクタトラストストアがないと、ログインモジュールが呼び出されることはなく、HTTPが関与する前にSSLレベルで接続が終了します。
Webで多くの調査を行った結果、これを回避するには、SSLContext/SSLSocketFactoryで構成されたカスタムX509TrustManagerが必要であると判断しました。このカスタムトラストマネージャーは、データベースに保存されているものからクライアント証明書を検証します。このカスタムトラストマネージャーを作成しましたが、接続できないようです。jbossまたはtomcat5.xでこれを設定する方法を知っている人はいますか?Tomcat 7で、次の構成がコネクター、trustManagerClassNameで使用可能であることに気付きましたが、それは私にとってオプションではありません。私はそれが可能だと思います、どんな助けでも大歓迎です。