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 ?
Réponses
Trop de publicités?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"));
}
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:
Consulter cette Documentation pour plus d'info.
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