2011-06-13 4 views
2

J'ai deux services Web (MyService et MyProtectedService). Je veux que les deux passent sous le même port HTTPS mais seulement celui qui est protégé doit avoir l'authentification du client (clientAuth = true).Accès sécurisé Tomcat

Toute la sécurité fonctionne correctement, mais le problème est que l'authentification du client est activée pour les deux services, pas seulement pour le protégé. Ce que je voudrais, c'est supprimer l'authentification du client pour l'un d'entre eux, ou appliquer l'authentification du client à l'autre seulement.

Est-ce que quelqu'un a un indice? Merci

Dans le web.xml:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>protected element</web-resource-name> 
     <description/> 
     <url-pattern>/MyProtectedService</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

MISE À JOUR: J'ai essayé de diviser le service en deux contraintes:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>OpenService</web-resource-name> 
     <description/> 
     <url-pattern>/OpenService</url-pattern> 
    </web-resource-collection> 
</security-constraint> 

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>protected</web-resource-name> 
     <description/> 
     <url-pattern>/MyProtectedService</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
    <login-config> 
     <auth-metod>CLIENT-CERT</auth-metod> 
    </login-config> 
</security-constraint> 

Et ont ClientAuth = false dans server.xml.

Mais je peux accéder à ce sans authentification client: https://MACHINE/MyProtectedService/MyProtectedService?wsdl

Répondre

2

L'approche est d'avoir deux séparé des contraintes de sécurité même si celui de la fonction publique n'a pas de contrainte du tout (ni auth-constraint ni un user-data-constraint). Il suppose que les deux services ont des URL différentes qui est très probablement le cas:

<security-role> 
    <role-name>ProtectedServiceRole</role-name> 
</security-role> 

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Public Service</web-resource-name> 
     <url-pattern>/PublicService/*</url-pattern> 
    </web-resource-collection> 
</security-constraint> 

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Protected Service</web-resource-name> 
     <url-pattern>/ProtectedService/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
    <auth-constraint> 
     <role-name>ProtectedServiceRole</role-name> 
    </auth-constraint> 
</security-constraint> 

Le nom de rôle spécifié dans le auth-constraint déclenche une authentification.

Mise à jour:

Je crains que je ne l'ai pas lu correctement votre question et négligé la partie d'authentification du certificat. Bien que je l'ai utilisé dans le passé, je n'ai jamais eu la configuration mixte dont vous avez besoin, je ne peux que donner quelques options que vous pourriez essayer ensuite:

Actuellement, vous avez besoin de l'authentification sur le niveau de transport. C'est à bas niveau et trop tôt. Avez-vous essayé d'installer clientAuth-faux et au lieu d'ajouter les lignes suivantes à votre web.xml:

<login-config> 
    <auth-method>CLIENT-CERT</auth-method> 
</login-config> 

Une autre approche serait d'utiliser deux ports differnt pour les deux services. Pour cela, vous définissez deux connecteurs différents dans le fichier server.xml.

+0

Merci pour votre réponse. J'ai essayé cela et je pense qu'il y a autre chose en cause parce qu'on me demande toujours le cert. Si au lieu de https j'utilise http: 443 alors j'obtiens des caractères étranges. Des idées? –

+0

@Codo, il semble que Tomcat demande toujours le client auth (server.xml est vérifié avant web.xml, cela a du sens), donc je ne pense pas que ce que vous avez mentionné puisse fonctionner ...: -? –

+0

Une solution utile? –

Questions connexes