Comment puis-je indiquer mon .fichier de magasin de clés avec le Printemps et de Démarrage de Tomcat?
Je suis en train de configurer le Printemps de Sécurité au travail avec le Printemps de Démarrage de Tomcat intégré instance. Il existe assez peu de base des échantillons qui font cela, mais je suis coincé là où ils s'arrêtent, ils font l'authentification de base sur le protocole HTTP (pas de HTTPS).
Je pourrais probablement le faire fonctionner si j'avais accès aux fichiers de configuration de Tomcat ( server.xml
), mais depuis le Printemps de Démarrage utilise un Tomcat intégré instance (qui est par ailleurs une commodité énorme), je n'ai pas accès à la configuration de Tomcat fichiers (au moins, pas à ma connaissance).
Il y a peut être un application.properties
paramètre pour cela, mais je n'ai pas été en mesure de le retrouver. J'ai vu des références à un server.contextPath
champ dans application.properties
que je soupçonne avoir quelque chose à voir avec le remplacement de fichiers de configuration de Tomcat. Même si c'est lié, je ne sais pas par où commencer, de toute façon, toutes les Tomcat SSL instructions que j'ai vu démarrer avec modification d'un server.xml
fichier, ne pas construire un à partir de zéro.
Cela peut-il être fait avec Spring Boot (soit en quelque sorte la spécification d'un extrait de server.xml
ou par d'autres moyens)? Si non, quelle serait la façon la plus simple de faire cela? Je comprends que j'ai peut-être besoin d'exclure le composant Tomcat de Printemps de Démarrer, mais je préfère éviter si possible.
- J'ai trouvé un autre exemple qui utilise un autre
application.properties
paramètre,server.tomcat.basedir
, qui me frappe comme étant plus susceptibles d'être liés aux incorporés de configuration de Tomcat. Je n'arrive pas à tout faire mais c'est probablement plus proche de la bonne direction et peut le faire à ma question plus claire. - Pas de chance avec la ligne de commande les variables d'environnement:
-Djavax.net.ssl.keyStore=/path/to/keystore
-Djavax.net.ssl.keyStorePassword=keyStorePass
soit.
Vous devez vous connecter pour publier un commentaire.
En commençant par le Printemps de Démarrage 1.2, vous pouvez configurer SSL à l'aide de
application.properties
ouapplication.yml
. Voici un exemple pourapplication.properties
:Même chose avec
application.yml
:Voici un lien vers le actuel de la documentation de référence.
Il s'avère qu'il y a un moyen de le faire, bien que je ne suis pas sûr que j'ai trouvé le " bon " chemin depuis ce requis d'heures de lecture de code source à partir de plusieurs projets. En d'autres termes, cela peut être beaucoup de bêtes de travail (mais il fonctionne).
Tout d'abord, il n'y a aucun moyen d'obtenir à la server.xml dans le Tomcat intégré, soit pour l'augmenter ou de le remplacer. Cela doit être fait par programmation.
Second, le require_https paramètre n'aide pas puisque vous ne pouvez pas définir de cert info de cette façon. Il ne configurer la redirection de http à https, mais il ne vous donne pas une façon de faire de https travail de sorte que le transfert n'est pas utile. Cependant, l'utilisation avec les trucs ci-dessous, qui ne faire https travail.
Pour commencer, vous devez fournir un
EmbeddedServletContainerFactory
comme expliqué dans la Intégré Conteneur de Servlet Soutien docs. Les docs sont pour Java, mais le Groovy ressemblerait à peu près la même. Notez que je n'ai pas été en mesure de l'obtenir à reconnaître la@Value
annotation est utilisée dans leur exemple, mais ce n'est pas nécessaire. Pour groovy, il suffit de mettre cela dans une nouvelle .groovy de fichiers et d'inclure ce fichier sur la ligne de commande lorsque vous lancezspring
de démarrage.Maintenant, les instructions de dire que vous pouvez personnaliser le
TomcatEmbeddedServletContainerFactory
classe que vous avez créé dans le code de sorte que vous pouvez modifier web.xml comportement, c'est vrai, mais pour nos fins, il est important de savoir que vous pouvez également l'utiliser pour adapterserver.xml
comportement. En effet, la lecture de la source pour la classe, et de le comparer avec le Tomcat Intégré docs, vous voyez que c'est le seul endroit pour le faire. La fonction intéressante estTomcatEmbeddedServletContainerFactory.addConnectorCustomizers()
, qui ne peut pas ressembler à beaucoup de la Javadoc, mais en réalité vous donne le Tomcat Intégré objet à personnaliser vous-même. Passez simplement votre propre mise en œuvre deTomcatConnectorCustomizer
et de définir les choses que vous voulez sur leConnector
dans levoid customize(Connector con)
fonction. Maintenant, il y a environ un milliard de choses que vous pouvez faire avec leConnector
et je ne pouvais pas trouver utile docs pour elle, mais lecreateConnector()
fonction dans ce ce gars personnels Printemps-embedded-Tomcat projet est un guide très pratique. Mon implémentation fini par ressembler à ceci:L'permettra à l'autowiring ramasser cette mise en œuvre de courir avec lui. Une fois que j'ai fixé mon busted fichier de magasin de clés (assurez-vous que vous appelez keytool avec
-storetype pkcs12
, pas-storepass pkcs12
comme indiqué ailleurs), cela a fonctionné. Aussi, il serait de loin préférable de fournir les paramètres (port, mot de passe, etc) que les paramètres de configuration pour le test et comme... je suis sûr que c'est possible si vous pouvez obtenir le @de la Valeur de l'annotation de travailler avec Groovy.Externe fichier de stockage des clés, le préfixe "fichier:"
Si vous ne voulez pas mettre en œuvre votre
connector customizer
, vous pouvez créer et importer la bibliothèque (https://github.com/ycavatars/spring-boot-https-kit) qui fournit prédéfinisconnector customizer
. Selon le README, il vous suffit de créer votre fichier de clés, configurerconnector.https.*
, l'importation de la bibliothèque et ajouter@ComponentScan("org.ycavatars.sboot.kit")
. Ensuite, vous aurez une connexion HTTPS.Et voici un exemple de personnalisation mis en œuvre dans Groovy:
https://github.com/UniconLabs/orville/blob/master/web/src/main/groovy/org/apereo/openregistry/config/TomcatSslConfiguration.groovy