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

Gökhan Ayrancıoğlu
Nov 7 · 2 min read

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.

Kaynak;

Gökhan Ayrancıoğlu

Written by

Software Engineer @Turkcell Ex: @Netas | • #IoT • #Big Data • #Spring Boot • #Spark • #Microservices

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade