Teten Nugraha
BackendHero

Follow

BackendHero

Follow
Spring Boot Secure DB Password with Jasypt

Spring Boot Secure DB Password with Jasypt

Teten Nugraha's photo
Teten Nugraha
·Dec 31, 2019·

3 min read

Photo by Meritt Thomas on Unsplash

Latar Belakang

Sudah pada umumnya sebuah aplikasi melakukan koneksi ke database apapun itu vendor database nya seperti MySQL, PostgreSQL, Oracle, SQlServer dan lain-lain.

Tapi kita sebagai programmer, kadang lupa untuk mengamankan data-data credentials seperti password akses ke database di level, dev, sit, uat atau bahkan production.

Untuk itu, kita perlu mengamankan password database tersebut dengan cara melakukan enkripsi password tersebut, salah satu library nya yaitu Menggunakan Jasypt (Java Simplified Encryption) yang bisa kalian dapatkan di sini http://www.jasypt.org/. Bagaimana cara menggunakannya, yuk kita bahas sama-sama disini…

Prasyarat

Dalam artikel ini tools yang penulis gunakan yaitu :

  1. JDK 1.8 (Bisa menggunakan versi di atas ini)

  2. IDE : IntelliJ IDEA (bisa menggunakan Eclipse atau Netbeans)

  3. Maven 3

  4. MySQL 5.7

  5. Download Jasypt menggunakan link diatas

Lets Rock …

Buat sebuah projek baru Spring boot di https://start.spring.io/ dengan spesifikasi sebagai berikut :

  • Spring Boot versi 2.2.1.RELEASE

  • Spring Data JPA

  • Spring Web

  • MySQL Connector

  • Dbeaver DB Tools

kemudian generate dan yang terakhir tambahkan dependensi berikut

<dependency>
   <groupId>com.github.ulisesbocchio</groupId>
   <artifactId>jasypt-spring-boot-starter</artifactId>
   <version>LATEST</version>
</dependency>

Lalu buat sebuah database menggunakan Dbeaver, misalnya nama database nya db_tasks dan buat sebuah tabel category

CREATE TABLE category ( category_id BIGINT(20) NOT NULL AUTO_INCREMENT, name VARCHAR(255) NULL DEFAULT NULL, PRIMARY KEY (category_id) )

dan inputkan sembarang nilai ke dalam tabel tersebut.

Inputkan sembarang nilaiInputkan sembarang nilai

Buka IDE dan buat sebuah entity class Category sebagai berikut :

@Entity
@Table(name = "category")
public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.*IDENTITY*)
    private long categoryId;
    private String name;

    public Category() {
    }

    public Category(long categoryId, String name) {
        this.categoryId = categoryId;
        this.name = name;
    }

    public long getCategoryId() {
        return categoryId;
    }

    public void setCategoryId(long categoryId) {
        this.categoryId = categoryId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Category{" +
                "categoryId=" + categoryId +
                ", name='" + name + '\'' +
                '}';
    }
}

Lalu, untuk komunikasi ke database, kita buatkan interface repository nya dengan nama CategoryRepository

public interface CategoryRepository extends JpaRepository<Category, Long> {
}

di Main class nya, buatkan sebuah objek CategoryRepository dan tambahkan interface CommandLineRunner lalu implementasikan method run .

@SpringBootApplication
public class SecurityApplication implements CommandLineRunner {

   @Autowired
   private CategoryRepository categoryRepository;

   public static void main(String[] args) {
      SpringApplication.*run*(SecurityApplication.class, args);
   }

   @Override
   public void run(String... args) throws Exception {

      System.*out*.println("Categori "+ categoryRepository.findAll());

   }
}

langkah terakhir, buka command prompt dan masuk ke folder jasypt yang sudah kalian dowload, kemudian ketikan script berikut

encrypt.bat input=”root” password=dev-env algorithm=PBEWITHMD5ANDDES

encrypt.bat input=”root”, adalah password database yang ingin kita enkripsi, di sini password mysql saya adalah root (tidak direkomendasikan ya hehehe menggunakan password ini)

password=dev-env, adalah semacam key yang akan disertakan nantinya di application.properties

algorithm=PBEWITHMD5ANDDES, algoritma enkripsi yang digunakan

jika berhasil maka tampilannya adalah sebagai berikut.

yang perlu kita perhatikan adalah bagian bawah nya (OUTPUT) yaitu ncvDtFBZQBG3GYsGE0sbbg== adalah plaintext yang sudah kita encrypt. Untuk menggunakna nya yaitu ditambahkan ENC(..) sehingga menjadi

ENC(ncvDtFBZQBG3GYsGE0sbbg==)

Buka file application.properties lalu tuliskan konfigurasi sebagai berikut :

spring.datasource.url=jdbc:mysql://localhost:3306/db_tasks
spring.datasource.username=root
spring.datasource.password=ENC(ncvDtFBZQBG3GYsGE0sbbg==)

jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.password=dev-env

untuk bagian password kita menggunakan plainteks yang sudah dienkripsi tadi.

jasypt.encryptor.algorithm=PBEWithMD5AndDES

adalah metode algoritma yang kita pakai pada saat akan mengekipsi

jasypt.encryptor.password=dev-env

adalah key yang kita gunakan pada saat mengenkripsi,

Oke langkah terakhir adalah kita akan mencoba mengetest dengan cara menjalankan aplikasi tersebut.

dibagian terakhir kita lihat, kita berhasil fetch data dari tabel Category, itu berarti settingan application.properties kita sudah berhasil.

Did you find this article valuable?

Support Teten Nugraha by becoming a sponsor. Any amount is appreciated!

Learn more about Hashnode Sponsors
 
Share this