개요
프로그램을 개발한 후 프로젝트를 외부에 배포하기 위해 회사 내부 정보를 암호화해야 했다.
우선 가장 대중적이고 래퍼런스가 많은 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
'🌱JAVA > Spring' 카테고리의 다른 글
[Spring Boot] 단위 테스트 성공 시 Spring Rest Docs 파일 생성 (2) | 2024.01.02 |
---|---|
[Spring Boot] 단위 테스트 코드 작성 (JUnit 5) (0) | 2024.01.02 |
[Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 13 (0) | 2023.06.17 |
[Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 12 (0) | 2023.03.19 |
[Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 11 (0) | 2023.01.21 |
댓글