[Etc] application.yml 변경 및 Jasypt
2023. 8. 9. 22:47ㆍWeb/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 기반의 애플리케이션에 통합 가능
- 애플리케이션 구성을 암호화할 수 있는 기능 내장
-
- 프로젝트 Dependency 추가
- 해당 Dependency는 Gradle 버전
// <https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter> implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
- Jasypt 설정 및 Bean 등록
- yml 파일에 입력
jasypt: encryptor: property: prefix: ENC( suffix: ) bean: jasyptStringEncryptor password: 230809
- 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; } }
- Jasypt 온라인 암복호화 사이트 사용
- https://www.devglan.com/online-tools/jasypt-online-encryption-decryption
- 실행환경 변경
- -Djasypt.encryptor.password= ”password”과정
- 프로젝트 Dependency 추가
변경 후 최종 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==)
'Web > Spring' 카테고리의 다른 글
[Spring] 이메일 인증 (0) | 2023.08.26 |
---|---|
[Error] java.lang.ClassNotFoundException: org.apache.hc.client5.http.classic.HttpClient (0) | 2023.08.17 |
[Test Code] @WithMockUser / @WithUserDetails / @WithSecurityContext (0) | 2023.01.27 |
[Spring] Test code 학습 (0) | 2022.12.10 |
[Spring] @PathVariable, @RequestParam, @RequestBody, @ModelAttribute (0) | 2022.12.07 |