Konfigurácia Spring Boot s Jasyptom

1. Úvod

Jasypt (Java Simplified Encryption) Spring Boot poskytuje nástroje na šifrovanie zdrojov nehnuteľností v Boot aplikáciách.

V tomto článku si ukážeme, ako môžeme pridať podporu jasypt-spring-boot a ako ju používať.

Ďalšie informácie o používaní nástroja Jasypt ako rámca pre šifrovanie nájdete v našom úvode k programu Jasypt tu.

2. Prečo Jasypt?

Kedykoľvek potrebujeme uložiť citlivé informácie do konfiguračného súboru - to znamená, že v podstate tieto informácie robíme zraniteľnými; patria sem akékoľvek citlivé informácie, napríklad poverovacie listiny, ale určite oveľa viac.

Autor: pomocou Jasyptu môžeme zabezpečiť šifrovanie pre atribúty súborov vlastností a naša aplikácia vykoná dešifrovanie a získanie pôvodnej hodnoty.

3. Spôsoby použitia JASYPTU s Spring Boot

Poďme diskutovať o rôznych spôsoboch použitia Jasyptu s Spring Boot.

3.1. Použitím jasypt-štartér pružiny-boot

Musíme do nášho projektu pridať jednu závislosť:

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

Maven Central má najnovšiu verziu štartéra jasypt-jar-boot-štartér.

Teraz zašifrujme text „[Chránený e-mailom]“ s tajným kľúčom "heslo" a pridajte ho do encrypted.properties:

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

Poďme definovať konfiguračnú triedu AppConfigForJasyptStarter - špecifikovať zašifrované.vlastnosti spis ako a PropertySource :

@Configuration @PropertySource ("encrypted.properties") verejná trieda AppConfigForJasyptStarter {} 

Teraz napíšeme fazuľu PropertyServiceForJasyptStarter na získanie hodnôt z zašifrované.vlastnosti. Dešifrovanú hodnotu je možné získať pomocou @Hodnota anotácia alebo getProperty () metóda Životné prostredie trieda:

@Service verejná trieda PropertyServiceForJasyptStarter {@Value ("$ {encrypted.property}") súkromná vlastnosť reťazca; public String getProperty () {return property; } public String getPasswordUsingEnvironment (prostredie prostredia) {return environment.getProperty ("encrypted.property"); }} 

Nakoniec pomocou vyššie uvedenej triedy služieb a nastavenia tajného kľúča, ktorý sme použili na šifrovanie, môžeme ľahko načítať dešifrované heslo a použiť ho v našej aplikácii:

@Test public void whenDecryptedPasswordNeeded_GetFromService () {System.setProperty ("jasypt.encryptor.password", "heslo"); Služba PropertyServiceForJasyptStarter = appCtx .getBean (PropertyServiceForJasyptStarter.class); assertEquals ("[chránený e-mailom]", service.getProperty ()); Environment environment = appCtx.getBean (Environment.class); assertEquals ("[chránený e-mailom]", service.getPasswordUsingEnvironment (prostredie)); } 

3.2. Používanie jasypt-spring-boot

Pre projekty, ktoré sa nepoužívajú @SpringBootApplication alebo @EnableAutoConfiguration, môžeme použiť jasypt-pružina-topánka závislosť priamo:

 com.github.ulisesbocchio jasypt-spring-boot 2.0.0 

Podobne zašifrujeme text „[Chránený e-mailom]“ s tajným kľúčom „Heslo“ a pridajte ju do encryptedv2.properties:

encryptedv2.property = ENC (dQWokHUXXFe + OqXRZYWu22BpXoRZ0Drt)

A poďme mať novú konfiguračnú triedu pre závislosť jasypt-jar-boot.

Tu musíme pridať anotáciu @EncryptablePropertySource :

@Configuration @EncryptablePropertySource ("encryptedv2.properties") verejná trieda AppConfigForJasyptSimple {}

Také nové PropertyServiceForJasyptSimple fazuľa vrátiť sa encryptedv2.properties je definovaný:

@Service verejná trieda PropertyServiceForJasyptSimple {@Value ("$ {encryptedv2.property}") súkromná vlastnosť reťazca; public String getProperty () {return property; }} 

Nakoniec pomocou vyššie uvedenej triedy služieb a nastavením tajného kľúča, ktorý sme použili na šifrovanie, môžeme ľahko načítať server encryptedv2.property:

@Test public void whenDecryptedPasswordNeeded_GetFromService () {System.setProperty ("jasypt.encryptor.password", "heslo"); PropertyServiceForJasyptSimple služba = appCtx .getBean (PropertyServiceForJasyptSimple.class); assertEquals ("[chránený e-mailom]", service.getProperty ()); } 

3.3. Používanie vlastného nástroja JASYPT Encryptor

Šifrovače definované v časti 3.1. a 3.2. sú konštruované s predvolenými hodnotami konfigurácie.

Poďme si však definovať vlastný šifrovač Jasypt a skúste použiť pre našu aplikáciu.

S0, vlastná šifrovacia fazuľa bude vyzerať takto:

@Bean (name = "encryptorBean") public StringEncryptor stringEncryptor () {PooledPBEStringEncryptor encryptor = nový PooledPBEStringEncryptor (); SimpleStringPBEConfig config = nový SimpleStringPBEConfig (); config.setPassword ("heslo"); config.setAlgorithm ("PBEWithMD5AndDES"); config.setKeyObtentionIterations ("1 000"); config.setPoolSize ("1"); config.setProviderName ("SunJCE"); config.setSaltGeneratorClassName ("org.jasypt.salt.RandomSaltGenerator"); config.setStringOutputType ("base64"); encryptor.setConfig (konfigurácia); návratový šifrovač; } 

Ďalej môžeme upraviť všetky vlastnosti pre SimpleStringPBEConfig.

Tiež musíme pridať nehnuteľnosť „Jasypt.encryptor.bean“ k nášmu application.properties, aby Spring Boot vedel, ktorý Custom Encryptor by mal použiť.

Napríklad pridáme vlastný text „[Chránený e-mailom]“ šifrované tajným kľúčom „Heslo“ v application.properties:

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

Len čo to nastavíme, môžeme ľahko získať šifrovanýv3.vlastnosť z jari Životné prostredie:

@Test public void whenConfiguredExcryptorUsed_ReturnCustomEncryptor () {Environment environment = appCtx.getBean (Environment.class); assertEquals ("[chránený e-mailom]", environment.getProperty ("encryptedv3.property")); } 

4. Záver

Použitím Jasyptu môžemeposkytujú ďalšie zabezpečenie údajov, s ktorými aplikácia narába.

Umožňuje nám to viac sa sústrediť na jadro našej aplikácie a v prípade potreby ju môžeme použiť aj na zabezpečenie vlastného šifrovania.

Úplný kód pre tento príklad je ako vždy k dispozícii na stránkach Github.