2011-10-19 2 views
2

Je tente d'installer des connexions SSL pour un service Web B2B et qui nécessite l'authentification du client sur le serveur. Étant donné que le serveur héberge des URL qui sont également accessibles à partir d'utilisateurs réguliers via le navigateur, toutes les connexions à l'hôte ne doivent pas forcément être exécutées par le client. Seules les URL spécifiques nécessitent une authentification client pour valider le certificat X509 des appelants. Nous utilisons JBoss 5.x, qui est basé sur Tomcat 5.x donc j'ai une configuration de connecteur comme ceci:Personnalisé SSL TrustManager pour serveur d'applications Java

 <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" /> 

Comme vous pouvez le voir, je keystore configuré afin que nous puissions fournir à notre Cert Signé et je ont clientAuth = false comme les URL ayant besoin client-auth sera configuré dans web.xml comme ceci:

<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> 

Grâce à une coutume JAAS module de connexion, je peux réellement obtenir ce travail sI dans la configuration du connecteur I ci-dessus aussi spécifique un truststore qui a les certificats de client. Voilà où est mon problème. Compte tenu de la configuration de notre application et de notre évolutivité, chaque configuration de serveur d'applications jboss prend en charge une segmentation spécifique de nos utilisateurs et je ne veux pas que les truststores soient configurés partout sur le système de fichiers. Nous devons charger dynamiquement les certificats de confiance dans le code de notre base de données. Le moduble de connexion JAAS personnalisé le fait au niveau web, et assigne aussi des rôles, mais sans le fichier de confiance du connecteur, le module de connexion n'est jamais appelé, la connexion est terminée au niveau SSL avant que HTTP ne soit impliqué. Après de nombreuses recherches sur le Web, j'ai déterminé que j'avais besoin d'un X509TrustManager personnalisé configuré dans SSLContext/SSLSocketFactory pour contourner ce problème. Ce gestionnaire de confiance personnalisé validerait également les certificats clients en dehors de ceux stockés dans notre base de données. J'ai créé ce gestionnaire de confiance personnalisé, mais je n'arrive pas à le connecter. Est-ce que quelqu'un sait un moyen de configurer cela dans jboss ou tomcat 5.x? J'ai remarqué dans Tomcat 7 que la configuration suivante est disponible sur un connecteur, trustManagerClassName, mais ce n'est pas une option pour moi. Je suppose que c'est possible, toute aide est grandement appréciée.

Répondre

0
Questions connexes