Spring Boot utilizza il file delle proprietà e, almeno per impostazione predefinita, le password sono in testo normale. È possibile nascondere/decifrare in qualche modo questi?Spring Boot come nascondere le password nel file delle proprietà
risposta
È possibile utilizzare Jasypt per crittografare le proprietà, così si potrebbe avere la vostra proprietà come questa:
db.password=ENC(XcBjfjDDjxeyFBoaEPhG14wEzc6Ja+Xx+hNPrJyQT88=)
Jasypt consente di crittografare le proprietà utilizzando algoritmi differenti, una volta a ottenere la proprietà crittografata si mette dentro il ENC(...)
. Per esempio, è possibile crittografare questo modo attraverso Jasypt utilizzando il terminale:
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=
di configurare facilmente con molla di avvio è possibile utilizzare il suo antipasto:
jasypt-spring-boot-starter
tenere a mente, che è necessario avviare l'applicazione utilizzando la stessa password utilizzata per crittografare le proprietà.Così, si può iniziare la vostra applicazione in questo modo:
mvn -Djasypt.encryptor.password=supersecretz spring-boot:run
È possibile controllare qui di seguito link per maggiori informazioni:
https://www.ricston.com/blog/encrypting-properties-in-spring-boot-with-jasypt-spring-boot/
Per utilizzare le proprietà crittografati a vostra applicazione semplicemente utilizzarlo come al solito, l'uso entrambi i metodi che ti piace (fili stivale primavera la magia, in ogni caso la proprietà deve essere naturalmente nel classpath):
Utilizzando @Value
annotazione
@Value("${db.password}")
private String password;
o utilizzando Environment
@Autowired
private Environment environment;
public void doSomething(Environment env) {
System.out.println(env.getProperty("db.password"));
}
Spring Cloud Config Server consentirà questo tipo di comportamento. Usando JCE puoi impostare una chiave sul server e usarla per cifrare le proprietà dell'app.
http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html
Se si desidera nascondere le password, allora la soluzione più semplice è quello di utilizzare variabili di ambiente in application.properties
file o direttamente nel codice.
In application.properties
:
mypassword=${password}
Poi nella classe di configurazione:
@Autowired
private Environment environment;
[...]//Inside a method
System.out.println(environment.getProperty("mypassword"));
Nella tua configuration
classe:
@Value("${password}")
private String herokuPath;
[...]//Inside a method
System.out.println(herokuPath);
Nota: Potrebbe essere necessario riavviare dopo l'impostazione environme variabile nt. per Windows:
consultare questo Documentation per maggiori informazioni.
Non credo che l'impostazione della password principale nell'ambiente vars è una buona idea. La password è ora più esposta del necessario. Fornire una startup come mostrato da Federico è meno esposta e più "sicura" rispetto a impostarla nell'ambiente. – Jaavaaan
Yaa, non è se si sta utilizzando un computer condiviso. Ma se sei l'unico amministratore del tuo computer, nessun altro utente può vedere l'Env Vars. Ho risposto alla parte nascosta e quella più semplice. Ma sì, sono d'accordo che il metodo suggerito da Federico sia molto meglio. –
- 1. Le proprietà della riga di comando spring-boot sono disponibili quando si utilizza spring-boot: run?
- 2. Come memorizzare la password come crittografata nel file delle proprietà in primavera
- 3. Come impostare Spring Boot per eseguire le porte HTTPS/HTTP
- 4. Come ottenere le proprietà dell'ambiente da application.properties in logback.groovy nel progetto Spring Boot?
- 5. Spring Boot - nesting ConfigurationProperties
- 6. Come aggiungere più file application.properties in spring-boot?
- 7. Come leggere i dati dal file delle proprietà java utilizzando Spring Boot
- 8. Spring Boot Configurazione Elasticsearch
- 9. Come nascondere la password del database nel file di configurazione
- 10. in un'applicazione Spring Boot non sono presenti nel file jar quando si utilizza il plug-in Maven Spring Boot
- 11. Spring Boot: modifica segnaposto segnaposto di proprietà
- 12. Rimuovere "Using default security password" su Spring Boot
- 13. Spring boot + Groovy + logback.groovy
- 14. File application.properties specifico per l'ambiente in Spring Boot application
- 15. Spring Boot MultipartResolver mancante nel metodo PUT
- 16. I18n in Spring boot + Thymeleaf
- 17. Spring Boot & Spring Data: come sono gestite le Hibernate Sessions?
- 18. Grails Spring-Security -come confrontare le password-
- 19. Accesso al file delle proprietà in Spring Expression Language
- 20. Come posso utilizzare le proprietà YAML con l'iniezione del costruttore in Spring Boot?
- 21. Spring-boot: imposta il valore predefinito sulle proprietà configurabili
- 22. Posso definire le Proprietà di sistema nei file di configurazione di Spring Boot?
- 23. Come registrare le proprietà caricate da Spring?
- 24. Come ricaricare le proprietà con Spring?
- 25. Come usare il Dozer con Spring Boot?
- 26. come registrare le istruzioni sql in spring-boot
- 27. Spring Boot devtools IntelliJ
- 28. Valori di proprietà estese avvio processo Spring
- 29. Spring Boot condizionale su @ConfigurationProperties
- 30. Spring Boot + Spring swagger error
Potresti spiegarci meglio in dettaglio usando gradle @Frerica Piazza – Johir
Non è chiaro sull'uso con Maven. passi qualche proprietà e quale ulteriore? Dove file di proprietà? come ise questo valore nel codice? – gstackoverflow
@gstackoverflow, la domanda è relativa alla crittografia/decrittografia e viene contrassegnata con l'avvio a molla, l'intenzione era quella di spiegare gli elementi di crittografia e non l'utilizzo delle proprietà. Ad ogni modo, posso modificare questa risposta per darti maggiori dettagli. Nel frattempo, Spring usa questo totalmente trasparente, semplicemente iniettare le proprietà con '@Values (" db.password ")'. Per "dove" è solo il classpath. "Che altro" ... niente, spring boot fa tutta la magia automaticamente –