![[Spring Boot] 설정 파일 값 암호화 및 적용하기 (feat. Jasypt) [Spring Boot] 설정 파일 값 암호화 및 적용하기 (feat. Jasypt)](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
개요
프로그램을 개발한 후 프로젝트를 외부에 배포하기 위해 회사 내부 정보를 암호화해야 했다.
우선 가장 대중적이고 래퍼런스가 많은 Jasypt 라이브러리를 사용해 DB 접속 정보를 암호화하기로 했다.
의존성 추가
라이브러리
https://github.com/ulisesbocchio/jasypt-spring-boot
GitHub - ulisesbocchio/jasypt-spring-boot: Jasypt integration for Spring boot
Jasypt integration for Spring boot. Contribute to ulisesbocchio/jasypt-spring-boot development by creating an account on GitHub....
github.com
Gradle 의존성 추가
필자는 gradle을 사용하기 때문에 다음과 같이 build.gradle 파일에 의존성을 추가했다.
dependencies {
...
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
}
Mavan을 사용한다면 위 라이브러리 사이트의 설명을 참고하면 된다.
Config 설정
프로젝트 내에 JasyptConfig.java 파일을 만들어주고 코드를 입력해준다.
@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
@Bean("jasyptEncryptorDES")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("");
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
• config.setPassword - 암호화 시 key값으로 사용할 문자열
• config.setAlgorithm - 암호화 시 사용할 알고리즘
• config.setKeyObtentionIterations - 해시 반복 횟수
• config.setSaltGeneratorClassName - 정렬에 사용할 라이브러리
• config.setStringOutputType - 반환되는 암호화 문자열 타입
설정 파일에 암호화 값 적용
yml 파일에 암호화된 값을 적용하려면 'ENC(암호화된 값)' 형식으로 입력해주면 된다.
# jasypt를 사용하기 위한 기본 설정
jasypt:
encryptor:
password: ${jasyptPassword}
ivGeneratorClassname: org.jasypt.iv.RandomIvGenerator
bean: jasyptEncryptorDES
myValue:
hi: ENC(암호화된 값)
그렇다면 암호화된 값을 어떻게 얻어야할 지 고민이 될 것이다.
암호화된 값 출력하기
가장 간단한 방법으로는 Test 코드를 작성해서 암호화된 값을 얻는 방법이다.
다음과 같이 테스트 코드를 작성해서 console창에 출력된 암호화된 값을 설정 파일에 추가해주면 된다.
@SpringBootTest
class TestApplicationTests {
// 암호화 키 값
public String key = "";
@Test
void stringEncryptor() {
// 암호화할 문자열
String text = "";
System.out.println("Encrypted Text : " + jasyptEncoding(text));
}
public String jasyptEncoding(String value) {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
encryptor.setAlgorithm("PBEWithMD5AndDES");
encryptor.setPassword(key);
return encryptor.encrypt(value);
}
}
참고 사이트
https://github.com/ulisesbocchio/jasypt-spring-boot
GitHub - ulisesbocchio/jasypt-spring-boot: Jasypt integration for Spring boot
Jasypt integration for Spring boot. Contribute to ulisesbocchio/jasypt-spring-boot development by creating an account on GitHub....
github.com
https://velog.io/@donkey8/Application.properties-%EC%95%94%ED%98%B8%ED%99%94%ED%95%98%EA%B8%B0
Application.properties 암호화하기
초보 개발자로서 마주치는 당연한 문제 중 하나는 local에서 혼자 개발 할때와 실무에서 개발하는 환경이 다르다는 점이다.local에서 혼자 개발할때야.. 비밀번호든 DB경로든 내맘대로고 localhost 주...
velog.io
'🛠️Backend > Spring' 카테고리의 다른 글
[Spring Boot] Spring Boot & React 프로젝트 연결하기 (1) | 2024.10.30 |
---|---|
[Spring Boot] redirect 처리 (feat. RestTemplate, HttpServletRequest, @RequestBody) (1) | 2024.10.22 |
[Spring Boot] 프로젝트 실행 시 파일 존재 여부 확인 및 신규 파일 생성 (0) | 2024.03.06 |
[Spring Boot] Launch4j과 jar 파일을 사용해서 실행 파일(.exe) 만들기 (0) | 2024.03.06 |
[Spring Boot] jar 파일 실행 시 외부 폴더 이미지 찾아서 내려주기 (0) | 2024.02.15 |
댓글