118 votes

Démarrage de ressort comment cacher des mots de passe dans le fichier de propriétés

Spring Boot utilise le fichier de propriétés, et au moins par défaut, les mots de passe sont en texte clair. Est-il possible de les cacher ou de les déchiffrer ?

121voto

Fede Points 1467

Vous pouvez utiliser Jasypt pour chiffrer les propriétés, de sorte que vous pourriez avoir votre propriété comme cela:

db.password=ENC(XcBjfjDDjxeyFBoaEPhG14wEzc6Ja+Xx+hNPrJyQT88=)

Jasypt vous permet de crypter vos propriétés à l'aide de différents algorithmes, une fois que vous obtenez la propriété chiffrée vous mettez à l'intérieur de l' ENC(...). Par exemple, vous pouvez crypter ce chemin à travers Jasypt en utilisant le terminal:

encrypted-pwd$ java -cp ~/.m2/repository/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar  org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="contactspassword" password=supersecretz algorithm=PBEWithMD5AndDES

----ENVIRONMENT-----------------

Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 24.45-b08



----ARGUMENTS-------------------

algorithm: PBEWithMD5AndDES
input: contactspassword
password: supersecretz



----OUTPUT----------------------

XcBjfjDDjxeyFBoaEPhG14wEzc6Ja+Xx+hNPrJyQT88=

Pour configurer facilement avec Spring Boot, vous pouvez utiliser son starter jasypt-printemps-amorçage-starter avec l'ID de groupe com.github.ulisesbocchio

Gardez à l'esprit que vous aurez besoin pour démarrer votre application en utilisant le même mot de passe que vous avez utilisé pour crypter les propriétés. Ainsi, vous pouvez démarrer votre application de cette façon:

mvn -Djasypt.encryptor.password=supersecretz spring-boot:run

Vous pouvez consulter ci-dessous le lien pour plus de détails:

https://www.ricston.com/blog/encrypting-properties-in-spring-boot-with-jasypt-spring-boot/

Pour utiliser chiffrée de vos propriétés dans votre application juste l'utiliser comme d'habitude, d'utiliser soit la méthode que vous aimez (Printemps de Démarrage des fils de la magie, de toute façon, la propriété doit bien sûr être dans le classpath):

À l'aide de @Value d'annotation

@Value("${db.password}")
private String password;

Ou à l'aide de Environment

@Autowired
private Environment environment;

public void doSomething(Environment env) {
    System.out.println(env.getProperty("db.password"));
}

19voto

Sanjay Rawat Points 1570

Si vous voulez cacher vos mots de passe alors la solution la plus simple est d'utiliser les variables d'Environnement en application.properties le fichier ou directement dans votre code.

En application.properties:

mypassword=${password}

Puis dans votre classe de configuration:

@Autowired
private Environment environment;

[...]//Inside a method
System.out.println(environment.getProperty("mypassword"));

Dans votre configuration classe:

@Value("${password}")
private String herokuPath;

[...]//Inside a method
System.out.println(herokuPath);

Remarque: Vous pourriez avoir à redémarrer après la définition de la variable d'environnement. Pour windows:

In Windows

Consulter cette Documentation pour plus d'info.

12voto

ccit-spence Points 52

Spring Cloud Config Server permettra ce type de comportement. En utilisant JCE, vous pouvez configurer une clé sur le serveur et l'utiliser pour chiffrer les propriétés des applications.

http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X