Konfiguracija proljetnog pokretanja s Jasyptom

1. Uvod

Jasypt (Java pojednostavljeno šifriranje) Spring Boot nudi uslužne programe za šifriranje izvora svojstava u aplikacijama za pokretanje.

U ovom ćemo članku razgovarati o tome kako možemo dodati podršku za jasypt-spring-boot i koristiti je.

Za više informacija o korištenju Jasypta kao okvira za šifriranje, pogledajte ovdje naš Uvod u Jasypt.

2. Zašto Jasypt?

Kad god trebamo pohraniti osjetljive podatke u konfiguracijsku datoteku - to znači da te podatke u osnovi činimo ranjivima; to uključuje sve vrste osjetljivih podataka, poput vjerodajnica, ali zasigurno puno više od toga.

Po pomoću Jasypta možemo pružiti šifriranje atributa datoteke svojstava a naša će aplikacija obaviti posao dešifriranja i dohvaćanja izvorne vrijednosti.

3. Načini korištenja JASYPT-a s proljetnim čizmama

Razgovarajmo o različitim načinima korištenja Jasypta s Spring Bootom.

3.1. Koristeći jasypt-spring-boot-starter

Našem projektu moramo dodati jednu ovisnost:

 com.github.ulisesbocchio jasypt-spring-boot-starter 2.0.0 

Maven Central ima najnoviju verziju jasypt-spring-boot-starter-a.

Idemo sada šifrirati tekst “[E-pošta zaštićena]” s tajnim ključem "lozinka" i dodajte ga u šifrirana svojstva:

encrypted.property = ENC (uTSqb9grs1 + vUv3iN8lItC0kl65lMG + 8)

I definirajmo klasu konfiguracije AppConfigForJasyptStarter - odrediti šifrirano.svojstva datoteka kao PropertySource :

@Configuration @PropertySource ("encrypted.properties") javna klasa AppConfigForJasyptStarter {} 

Sad ćemo napisati uslužni grah PropertyServiceForJasyptStarter za preuzimanje vrijednosti iz šifrirano.svojstva. Dešifrirana vrijednost može se dobiti pomoću @Vrijednost napomena ili getProperty () metoda Okoliš razred:

@Service javna klasa PropertyServiceForJasyptStarter {@Value ("$ {encrypted.property}") privatno String svojstvo; javni String getProperty () {return svojstvo; } javni String getPasswordUsingEnvironment (Okolina okoline) {return environment.getProperty ("encrypted.property"); }} 

Konačno, koristeći gornju uslužnu klasu i postavljajući tajni ključ koji smo koristili za šifriranje, možemo lako doći do dešifrirane lozinke i koristiti u našoj aplikaciji:

@Test public void whenDecryptedPasswordNeeded_GetFromService () {System.setProperty ("jasypt.encryptor.password", "password"); PropertyServiceForJasyptStarter usluga = appCtx .getBean (PropertyServiceForJasyptStarter.class); assertEquals ("[zaštićen e-poštom]", service.getProperty ()); Okruženje okoliša = appCtx.getBean (Environment.class); assertEquals ("[zaštićen e-poštom]", service.getPasswordUsingEnvironment (okruženje)); } 

3.2. Korištenje jasypt-spring-boot

Za projekte koji se ne koriste @SpringBootApplication ili @EnableAutoConfiguration, možemo koristiti jasypt-proljeće-čizma ovisnost izravno:

 com.github.ulisesbocchio jasypt-spring-boot 2.0.0 

Slično tome, šifrirajmo tekst “[E-pošta zaštićena]” s tajnim ključem "zaporka" i dodajte ga u encryptedv2.properties:

encryptedv2.property = ENC (dQWokHUXXFe + OqXRZYWu22BpXoRZ0Drt)

Ajmo imati novu klasu konfiguracije za ovisnost jasypt-spring-boot.

Ovdje moramo dodati napomenu @EncryptablePropertySource :

@Configuration @EncryptablePropertySource ("encryptedv2.properties") javna klasa AppConfigForJasyptSimple {}

Također, novi PropertyServiceForJasyptSimple grah za povratak encryptedv2.properties je definirano:

@Service javna klasa PropertyServiceForJasyptSimple {@Value ("$ {encryptedv2.property}") privatno String svojstvo; javni String getProperty () {return svojstvo; }} 

Napokon, koristeći gornju uslužnu klasu i postavljajući tajni ključ koji smo koristili za šifriranje, možemo lako doći do encryptedv2.property:

@Test public void whenDecryptedPasswordNeeded_GetFromService () {System.setProperty ("jasypt.encryptor.password", "password"); PropertyServiceForJasyptSimple usluga = appCtx .getBean (PropertyServiceForJasyptSimple.class); assertEquals ("[zaštićen e-poštom]", service.getProperty ()); } 

3.3. Korištenje prilagođenog JASYPT Encryptor

Šifratori definirani u odjeljku 3.1. i 3.2. konstruirane su sa zadanim vrijednostima konfiguracije.

No, idemo definirati vlastiti Jasypt enkriptor i pokušajte koristiti za našu aplikaciju.

S0, prilagođeni grah enkriptora izgledat će ovako:

@Bean (name = "encryptorBean") javni StringEncryptor stringEncryptor () {PooledPBEStringEncryptor encryptor = novi PooledPBEStringEncryptor (); SimpleStringPBEConfig config = novi SimpleStringPBEConfig (); config.setPassword ("lozinka"); config.setAlgorithm ("PBEWithMD5AndDES"); config.setKeyObtentionIterations ("1000"); config.setPoolSize ("1"); config.setProviderName ("SunJCE"); config.setSaltGeneratorClassName ("org.jasypt.salt.RandomSaltGenerator"); config.setStringOutputType ("base64"); encryptor.setConfig (config); povratni enkriptor; } 

Nadalje, možemo izmijeniti sva svojstva za SimpleStringPBEConfig.

Također, trebamo dodati svojstvo "Jasypt.encryptor.bean" našem application.properties, tako da Spring Boot zna koji prilagođeni enkriptor treba koristiti.

Na primjer, dodajemo prilagođeni tekst “[E-pošta zaštićena]” šifrirano tajnim ključem "zaporka" u svojstva.svojstva:

jasypt.encryptor.bean = encryptorBean encryptedv3.property = ENC (askygdq8PHapYFnlX6WsTwZZOxWInq + i)

Jednom kada ga postavimo, lako možemo dobiti encryptedv3.property iz proljeća Okoliš:

@Test public void whenConfiguredExcryptorUsed_ReturnCustomEncryptor () {Environment environment = appCtx.getBean (Environment.class); assertEquals ("[zaštićen e-poštom]", environment.getProperty ("encryptedv3.property")); } 

4. Zaključak

Korištenjem Jasypta možemopružaju dodatnu sigurnost podacima s kojima aplikacija rukuje.

Omogućuje nam da se više usredotočimo na srž naše aplikacije, a po potrebi se može koristiti i za pružanje prilagođene šifriranja.

Kao i uvijek, cjeloviti kôd za ovaj primjer dostupan je na Githubu.