Veri

jasypt ile Bir Uygulamanın Konfigürasyonunda Bazı Değerlerin Şifrelenmesi

Bir uygulamanız olsun ve bu uygulama bir properties dosyasından veritabanı bilgilerini yüklesin. Veritabanın şifresinin bu dosyada açık bir şekilde olmasını istemeyebilirsiniz. Bunun için basit bir kütüphane olan jasypt kullanılabilir. Öncelikle Maven'e bağımlılığı ekleyelim:
<dependency>
	<groupId>org.jasyp</groupId>
	<artifactId>jasypt</artifactId>
	<version>1.9.3</version>
</dependency>
İlk iş veritabanın şifresini şifrelemek gerekir. Bunun için bir uygulama yapılabilir ve aşağıdaki gibi çalıştırılabilir:
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword("sifrelemek icin bir sifre"); 
encryptor.setAlgorithm("PBEWithHMACSHA512AndAES_256");
encryptor.setIvGenerator(new RandomIvGenerator());

String encryptedPassword = encryptor.encrypt("veritabani sifresi");
System.out.println(encryptedPassword);
Bu uygulamanın ürettiği şifre aşağıdaki gibi properties dosyasına eklenebilir :
javax.persistence.jdbc.username=dbusername
javax.persistence.jdbc.password=ENC(rv8w19IHwEMbwIC/fJF+DaQAUGasVNGBn4ySSLs5Li0cySa)
Şifrelenmiş şifre ENC( ile ) içine yerleştirilmelidir. Uygulama ilk açılırken konfigürasyon bilgilerini aşağıdaki gibi yükleyebilir ve şifreyi alabilir :
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword("sifrelemek icin bir sifre"); // bu uygulama acilirken vm argümanı olarak vb.. alinabilir
encryptor.setAlgorithm("PBEWithHMACSHA512AndAES_256");
encryptor.setIvGenerator(new RandomIvGenerator());

projectConfiguration = new EncryptableProperties(encryptor);

try(FileInputStream fis = new FileInputStream("path burada")){
	projectConfiguration.load(fis);
}catch (IOException e) {
	e.printStackTrace();
}

String username=projectConfiguration.get("javax.persistence.jdbc.username");
String password=projectConfiguration.get("javax.persistence.jdbc.password");
password değeri database şifresidir. Bu şekilde konfigürasyon dosyasında veritabanın şifresi açık olarak gözükmeyecektir. Sadece şifrelemek için kullanılan şifre kod içinde olacaktır. Sifrelemek icin gerekli olan şifre uygulama açılırken alınabilir. Bunun için örneğin aşağıdaki gibi VM argümanı olarak alınabilir:
-Dapplication.encryp.password=sifrelemek icin bir sifre
Bu değer aşağıdaki gibi uygulama açıldığı yerde konfigürasyonu okurken şifre aşağıdaki gibi set edilebilir:
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setPassword(System.getProperty("application.encryp.password"));	
encryptor.setAlgorithm("PBEWithHMACSHA512AndAES_256");
encryptor.setIvGenerator(new RandomIvGenerator());
Bu StandardPBEStringEncryptor'ü kullandığınız uygulama aşağıdaki gibi bir hata verebilir:
org.jasypt.exceptions.EncryptionOperationNotPossibleException
  Encryption raised an exception. A possible cause is you are using strong encryption
  algorithms and you have not installed the Java Cryptography Extension (JCE) Unlimited
  Strength Jurisdiction Policy Files in this Java Virtual Machine
Bu hata kullanılan algoritmanın JVM de olmadığı anlamına gelmektedir. Bunun için PBEWithHMACSHA512AndAES_256 algoritması yerine PBEWithMD5AndDES kullanırsanız sorun çözülecektir.
zafer.teker , 08.03.2020

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir