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.