8
votes

Sécurisez centralement toutes les webapps Tomcat à l'aide de l'authentification de base

J'ai un serveur Tomcat 6 contenant trois webApps: une personnalisation en tant que root, Jenkins et Nexus.

Je souhaite sécuriser les trois centralement (server.xml?) à l'aide de l'authentification de base.

Comment puis-je atteindre ce sans modifier ou configurer les webapps eux-mêmes?


0 commentaires

4 Réponses :


6
votes

Deux manières viennent à l'esprit:

  1. Vous pouvez modifier Conf / Context.xml, qui est inclus par WebApps tous et insérez les directives d'authentification à cet endroit. L'inconvénient est que vous ne pouvez pas exclure une webApp de l'authentification autant que je sache et que toutes les webapps partagent les mêmes besoins (bien que cela ressemble à ce dont vous avez besoin)
  2. Vous pouvez mettre en œuvre la sécurité via Apache ou un autre serveur Web en cours d'exécution devant Tomcat. Cela a du sens surtout si vous en avez déjà un.

0 commentaires

2
votes

Cela peut être fait, mais vous devrez travailler dessus.

pour Tomcat, essentiellement ce que vous voulez, c'est un Vanve Tomcat . C'est comme un filtre de servlet, mais il est spécifique à Tomcat.

Vous pouvez placer une vanne dans l'entrée hôte de votre configuration du serveur, puis toutes les applications de cet hôte devront passer par cette vanne. Et cette vanne est ce dont vous avez besoin pour gérer votre authentification de base.

Tomcat a déjà une vanne d'authentification de base, mais elle est conçue pour fonctionner avec l'application Web. Vous pouvez probablement saisir la source à cela et pirater dessus pour travailler au niveau de l'hôte plutôt qu'au niveau de l'application Web, protégeant ainsi toutes vos applications sans les configurer individuellement.

Maintenant, si vous étiez un peu plus ouvert d'esprit, je suggérerais le single single tomcat sur , puis augmentant chacune des applications Web pour utiliser BASIC dans leur web.xml après la spécification de servlet. C'est un changement essentiellement trivial sur les applications individuelles Web.xml, mais cela résout également le problème pour vous. Mais vous avez dit que vous ne vouliez pas modifier les applications Web, vous êtes donc bloqué en utilisant des trucs spécifiques à Tomcat et "la main" l'artisanat "vous-même à cela.


1 commentaires

Salut Will, j'ai pris votre idée et l'épissa avec une caractéristique cachée et tout est juste quelques déclarations. Étrange pourquoi cela n'est pas intégré au BasicAuthenticator ...



8
votes

J'ai d'abord essayé (sans succès) d'inclure la vanne BasicAuthenticator dans conf / context.xml . Cela ne semblait avoir aucun effet.

Enfin, je l'ai eu pour travailler (sécurisé toutes les webapps) en ajoutant cet extrait à conf / web.xml : < / p> xxx


0 commentaires

1
votes

C'est possible, mais Afaik n'est pas possible sans (certains) code. Voici une solution qui fait ne touche pas les webapps déployés forts> de quelque manière que ce soit, mais qui ne vous donne aucune autorisation à grain fin, seule l'authentification.

Tomcat 7 (et 6?) Pour effectuer l'authentification Même s'il n'y a pas de ressources protégées dans l'application Web, appelée PreemtiverAuthentication : p> xxx pré>

pop que dans votre contexte où que ce soit (vous devez peut-être créer catalina_base / conf / mywebApp.xml Code> Pour protéger MyWebApp.war). P>

Cela rendra toute demande entrante avec quoi que ce soit dans l'en-tête d'autorisation pour déclencher une autorisation. Toute demande sans em> l'en-tête d'autorisation passera toujours. P>

  • http://example.com:8080/mywebapp/ code> fonctionnera, tout en get / li>
  • http: // utilisateur: mot de passe@example.com: 8080 / mywebApp / code> ne sera pas (ou, il vérifiera un nom d'utilisateur et un mot de passe) LI> ul>

    Le truc restant est donc à Trip que "Fonction" à chaque fois, Strong> Même pour les utilisateurs qui n'envoient aucun en-tête d'autorisation. C'est là que je devais revenir à une vanne. P>

    Voici le code d'une vanne qui définit une en-tête de demande "Autorisation" à "FOO" s'il n'est pas présent. P>

    <Context preemptiveAuthentication="true">
      <Valve className="ConditionallyAddFakeAuthorizationHeader"/>
      <Valve className="org.apache.catalina.authenticator.BasicAuthenticator" />
    </Context>
    


0 commentaires