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.