Spring Boot Configuration(yaml,properties) dosyası üzerinde şifreleme — Yazılım Notlarım

Gökhan Ayrancıoğlu
2 min readNov 7, 2019

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

https://gokhana.dev

Kaynak;

--

--

Gökhan Ayrancıoğlu

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev