Spring Boot Configuration(yaml,properties) dosyası üzerinde şifreleme — Yazılım Notlarım
Spring Boot üzerinde configurasyon dosyaları içerisindeki gizli kalmasını istediğimiz password, database url gibi kısımları jasypt kütüphanesini kullanarak şifreleyebiliriz.
Configurasyon(yaml) dosyamdaki pw alanını şifrelemek istiyorum. (application.yml)
secret:
pw: bunu sifreliyorum
İlk olarak şifreleme işlemini yapabilmek amacıyla http://www.jasypt.org/ üzerinden en son sürümün jasypt-dist kısmını indirebilirsiniz. Bölyece yapacağımız işlemler için çalışan sh/bat dosyalarını elde etmiş olacağız. Dosyaya eriştiğimizde; jasypt-1.9.3/bin içerisinde aşağıdaki dosyalar bulunmalıdır.
- decrypt.bat
- digest.sh
- listAlgorithms.bat
- decrypt.sh
- encrypt.bat
- listAlgorithms.sh
- digest.bat encrypt.sh
encrypt.sh’ı kullanarak şifreleme işlemimizi gerçekleştirebiliriz.
./encrypt.sh input=’bunu sifreliyorum’ password=’sifrelemeparalom’
ve çıktısı;
— — ENVIRONMENT — — — — — — — — -Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.201-b09 — — ARGUMENTS — — — — — — — — — -input: bunu sifreliyorumpassword: sifrelemeparalom — — OUTPUT — — — — — — — — — — — ByOkfyheu3DHAYBYczugSNsfzKXyrdCO3T3FTg2nYWY=
şifrelenmiş şekline OUTPUT kısmında kavuşmuş oldum.
Artık şifreli halini yaml yada properties configurasyon dosyasına koyabilirim ve bunu kullandığım kütüphanenin şifreli olduğunu anlaması amacıyla ENC(sifreli) olarak belirtmem gerekiyor.
secret:
pw: ENC(ByOkfyheu3DHAYBYczugSNsfzKXyrdCO3T3FTg2nYWY=)
İlk olarak build.gradle dosyasına ilgili dependency eklenmelidir.
compile group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '2.1.0'
Daha sonra jasypt kütüphanesi sayesinde şifreleme işlemini yapabileceğimiz anlamına gelir. Bunun için Spring Boot uygulamamızın main classında @EnableEncryptableProperties anotasyonunu eklmemiz gerekiyor.
@EnableEncryptableProperties
@SpringBootApplication
public class Application{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Bir servis çalıştırılırken ilgili configleri decrypt edebilmesi için
-Djasypt.encryptor.password=***** argumanını VM options olarak verilmelidir.
Böylece ilgili alanları şifreli bir config dosyası elde etmiş oldum.
— Bana ulaşmak için: Twitter, Linkedin
— Kodlar konuşsun: Github
— 1:1 görüşmeler için: Superpeer
Kaynak;