[Etc] application.yml 변경 및 Jasypt

2023. 8. 9. 22:47Web/Spring

application.yml과 암호화

Applcation.properties vs yml

  • 사용 이유
    • 데이터를 저장하고 읽어오는데 사용하는 포멧
  • yaml
    • 여러 언어에 쓰이고 같은 configuration 파일을 여러 개의 애플리케이션이 읽기 가능
    • 계층 구조로 작성이 되기에 가독성의 이점 존재 → 읽기 쉬워짐
      • 데이터의 구조를 명확하게 표현 가능
  • properties
    • 키와 값으로 이루어짐
    • → 가독성이 떨어짐
  • yaml의 경우 복잡한 데이터 구조를 다루는 것에 적합
  • properties의 경우 간단한 설정 정보를 다루는데 적합

주의점

  • 두 개의 파일을 같이 사용한다면 properties의 우선순위가 더 높기에 yml의 설정 내용이 덮어씌워짐
  • → 되도록 하나의 방식으로 통일해서 사용
  • yml의 경우 들여 쓰기를 정확하게 해야 함
    • 구문 오류 발생 가능
  • 대소문자 구분
  • 특수문자 사용 가능
    • 이스케이프 문자를 사용해야 함

yml ↔ properties converter

https://mageddo.com/tools/yaml-converter


application 파일 암호화

현재는 로컬에서 진행을 하기에 해당 프로젝트의 환경 정보가 노출되어도 큰 위험은 없다. 그렇지만 나중에 서버를 올리게 되면 해당 정보를 노출하는 것은 위험이 된다고 판단을 하였기에 암호화를 진행하려고 한다.


  • 대상 : application.yml
  • 사용기술 : Jasypt
    • Java Simplified Encryption
    • 기본적인 암호화 기능을 추가할 수 있도록 도와주는 Java 라이브러리
    • 기능
      • 고급 암호화 기술을 사용하여 단방향 및 양방향 암호화 지원
      • 비밀번호, 텍스트, 숫자, 이진 등을 암호화
      • Spring 기반의 애플리케이션에 통합 가능
      • 애플리케이션 구성을 암호화할 수 있는 기능 내장
    1. 프로젝트 Dependency 추가
      1. Maven Repository: org.jasypt » jasypt » 1.9.3 (mvnrepository.com)
      • 해당 Dependency는 Gradle 버전
      // <https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter>
          implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
      
    2. Jasypt 설정 및 Bean 등록
      1. yml 파일에 입력
      jasypt:
        encryptor:
          property:
            prefix: ENC(
            suffix: )
            bean: jasyptStringEncryptor
            password: 230809
      
      1. JasyptConfig 생성
      package com.example.skillback.common.config;
      
      import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
      import org.jasypt.encryption.StringEncryptor;
      import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
      import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
      import org.springframework.beans.factory.annotation.Configurable;
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.context.annotation.PropertySource;
      
      @Configuration
      @EnableEncryptableProperties
      public class JasyptConfig {
      
          @Value("${jasypt.encryptor.password}")
          private String key;
      
          @Bean(name = "jasyptStringEncryptor")
          public StringEncryptor stringEncryptor() {
              PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
              SimpleStringPBEConfig config = new SimpleStringPBEConfig();
              config.setPassword(key);
              config.setAlgorithm("PBEWithMD5AndDES");
              config.setKeyObtentionIterations("1000");
              config.setPoolSize("1");
              config.setProviderName("SunJCE"); 
              config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
              config.setStringOutputType("base64");
              encryptor.setConfig(config);
              return encryptor;
          }
      }
      
    3. Jasypt 온라인 암복호화 사이트 사용
    4. https://www.devglan.com/online-tools/jasypt-online-encryption-decryption
    5. 실행환경 변경
      • -Djasypt.encryptor.password= ”password”과정
 

Programming Blog Article Feeds as per your Interest | DevGlan

Best programming article feeds as per your Interest on different technologies. Subscribe to any technology and explore the best articles from around the web.

www.devglan.com

인텔리제이 실행환경 변경

변경 후 최종 yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: ENC(SdZkvRsnek+3Hh6LzG0QOw==)
    url: ENC(ChqJ4sM/ZUKRGzq696YMz78SWVMRpTWS0LVBF975Z/kVO+vpkQiFV3CmuD+gff1xPQ1A7GJolXx1dgNMxKriHUyPD1FCSd4k/yjMWSkHQhNNpxMuq03bpA==)
    password: ENC(l26SgFG5yPvqqlL6dLI2LA==)
  jpa:
    hibernate:
      ddl-auto: update
jwt:
  secret:
    key: ENC(BCTdm+KRfD8KK13KY6Gi3mnlIC+xJkJFrwGTRvkLQ1F9RmmAPkHk71u6T2g+g2jts+SiuOO8BGiK9WdQT56zdTRzEkynvhcQnhWh9cIqytMiPuBsWqx12y2jB/7lu9rYuIs5MfFrR8A4il5WlSL4zIjaujDBNGsFQfnfNrjfgV8qJReGMzGA6g==)

jasypt:
  encryptor:
    property:
      prefix: ENC(
      suffix: )
      bean: jasyptStringEncryptor
      password: ENC(ykR6sevQXU/gYFcNEx/Vqw==)