Jasypt Nedir? Spring Boot application.properties Şifreleme Rehberi
Spring Boot projelerinde hassas verileri şifrelemek için Jasypt (Java Simplified Encryption) kütüphanesi kullanılır. jasypt-spring-boot-starter bağımlılığını projenize ekledikten sonra şifrelerinizi Jasypt CLI aracı ile hash'leyip konfigürasyon dosyasına spring.datasource.password=ENC(şifreli_metin) formatında eklersiniz. Şifreyi çözecek olan anahtar (master key) ise uygulamaya başlatılırken ortam değişkeni (environment variable) olarak verilir.
Veritabanı şifrelerini, API anahtarlarını ve hassas konfigürasyon değerlerini application.properties dosyasına açık metin (plain-text) olarak yazıp Git ortamına (GitHub/GitLab) göndermek büyük bir güvenlik zafiyetidir.
Spring Boot Jasypt entegrasyonu ile bu işlemi güvenli ve pratik bir şekilde nasıl çözeceğinizi, production (canlı) ortamında master şifrenizi nasıl koruyacağınızı adım adım inceleyeceğiz.
1. Jasypt Nedir? Ne İşe Yarar?
Jasypt (Java Simplified Encryption), Java uygulamalarında şifreleme (encryption) ve şifre çözme (decryption) işlemlerini basitleştiren güçlü bir kütüphanedir. Spring Boot entegrasyonu sayesinde kodunuzda hiçbir değişiklik yapmadan property dosyalarınızı korumanızı sağlar.
- Veritabanı (PostgreSQL, MySQL vb.) şifrelerini kod deposundan gizler.
- 3. parti API key ve secret bilgilerini korur.
- Production ortamında güvenlik seviyesini standartların üzerine çıkarır.
2. Spring Boot Projesine Jasypt Entegrasyonu
Kurulum oldukça basittir. Spring Boot'un property'leri otomatik olarak tarayıp çözebilmesi için pom.xml dosyanıza aşağıdaki bağımlılığı eklemeniz yeterlidir:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
3. Jasypt CLI ile Şifreleme Nasıl Yapılır?
Konfigürasyon dosyanıza şifreli değeri koymadan önce, gerçek şifrenizi bir Master Anahtar (Master Key) kullanarak şifrelemeniz (hash) gerekir.
Bunun için Jasypt CLI (Komut Satırı) aracını kullanarak terminalinizde şu komutu çalıştırın:
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI \
input="gercek_veritabani_sifrem" \
password="BenimGizliMasterAnahtarim" \
algorithm="PBEWITHHMACSHA512ANDAES_256"
PBEWithMD5AndDES algoritması zayıf kabul edilir. Şifreleme işlemlerinizde her zaman AES tabanlı (örneğin yukarıdaki gibi) güçlü algoritmalar tercih etmelisiniz.
4. application.properties İçinde Kullanımı
Yukarıdaki CLI komutundan elde ettiğiniz şifreli metni kopyalayın ve application.properties dosyanıza ekleyin. Jasypt'in bu değeri algılayabilmesi için şifreli metni ENC(...) formatına sarmalısınız.
# Veritabanı Ayarları
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=postgres
# Şifrelenmiş Değer
spring.datasource.password=ENC(y7x8Z9aBc...)
Uygulamayı Başlatma ve Anahtarı Verme
Projeyi ayağa kaldırırken şifreyi çözebilmesi için master anahtarınızı JVM parametresi olarak Spring Boot'a vermelisiniz:
mvn spring-boot:run -Djasypt.encryptor.password=BenimGizliMasterAnahtarim
5. @EnableEncryptableProperties Kullanımı
Normal şartlarda starter kütüphanesini eklemek Spring Boot için yeterlidir. Ancak özel (custom) property kaynakları kullanıyorsanız veya değerler çözülmüyorsa, ana sınıfınıza aşağıdaki anotasyonu ekleyerek süreci manuel olarak tetikleyebilirsiniz:
@SpringBootApplication
@EnableEncryptableProperties
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
6. Jasypt'in Performansa Etkisi Var mı?
Hayır. Jasypt şifre çözme işlemini (decryption) sadece Spring Boot uygulamasının ayağa kalkış (startup) aşamasında, property dosyaları ilk kez okunurken yapar. Uygulama çalışırken (runtime) çözülmüş şifre hafızada tutulacağı için gelen HTTP isteklerinin performansına en ufak bir etkisi yoktur.
7. Production Güvenlik Best Practices (2026)
Jasypt kullanırken yapılan en büyük hata, master anahtarı güvensiz ortamlarda saklamaktır. Canlı (Production) ortamlar için şu kurallara kesinlikle uyun:
- Master Key'i Koda Yazmayın:
jasypt.encryptor.passworddeğerini aslaapplication.propertiesiçine veya Java kodlarına açık açık yazmayın. - Environment Variable (Ortam Değişkeni) Kullanın: Sunucunuzda master şifreyi OS ortam değişkeni olarak (Örn:
export JASYPT_ENCRYPTOR_PASSWORD=anahtar) tanımlayın. - CI/CD Hatlarına Dikkat Edin: Jenkins, GitLab CI veya GitHub Actions pipeline'larınızda loglara master key'in basılmadığından emin olun (Secret masking kullanın).
- Gelişmiş Çözümler: Eğer sisteminiz devasa bir enterprise mimarisine ulaştıysa, Jasypt yerine HashiCorp Vault veya AWS Secrets Manager gibi tam donanımlı Secret yönetim araçlarına geçişi değerlendirin.
Sonuç
Spring Boot Jasypt kullanımı, modern backend projelerinde veri sızıntılarını önlemek ve güvenlik standartlarını yükseltmek için en pratik yöntemlerden biridir. Hassas verilerinizi şifreleyerek Git depolarınızı güvenle yönetebilirsiniz.
Backend mimarinizin güvenliğini artırmak için Auth süreçlerini anlattığımız Spring Security ve JWT Mimarisi rehberimize de göz atabilirsiniz.