개발일지/2023_한이음
[개발] spring boot - db 접속 정보 암호화, application.properties 암호화
기억지기 개발자
2023. 7. 11. 19:51
🛤️상황
application.properties에 있는 DB접속 정보가 아래의 코드처럼 그대로 담긴 코드가 깃랩에 올라가 있는 상태였다.
서버에 배포하기 시작하면 이것도 관리 대상이기 때문에 이 정보들을 암호화하는 작업이 필요했다.
spring.datasource.url="접속 경로"
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username="각자의 유저네임"
spring.datasource.password="각자의 패스워드"
🌸해결과정
- 이 정보들을 암호화하는 방식은 알아보니 굉장히 많았다. 그래서 이것저것 시도하다보니 더 오래 걸렸다.
- 내가 선택한 방식은 복호화하는 코드가 직접적으로는 없는 방식으로 선택했다.
1. 의존성 추가
// Jasypt 암호화를 위한 라이브러리
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
2. JasyptConfig 파일 생성/코드
@Configuration
@Component
@PropertySource("classpath:application.properties")
public class JasyptConfig {
@Autowired
private Environment environment;
@Bean("jasyptStringEncryptor") // 위에서 지정한 빈 이름으로 암호기 생성
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(environment.getProperty("password"));
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000"); // 암호화 키를 얻기위해 반복해야하는 해시 횟수
config.setPoolSize("1"); // 암호화 요청의 pool 크기
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64"); // 암호화 이후 어떤 형태로 값 받을지
((SimplePBEConfig) config).setSaltGenerator(new RandomSaltGenerator());
encryptor.setConfig(config);
return encryptor;
}
}
3. application.properties에 있는 DB 정보 암호화
https://www.devglan.com/online-tools/jasypt-online-encryption-decryption
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
4. VM options에 password(암호화 키값) 적기
4-1) Edit Configurations에 들어간다.
4-2) VM options에 "-Dpassword=your_secretkey "를 적어준다.
5. 깃랩(깃허브)에 업로드
.properties에 패스워드 값을 지정하는 게 아니라 별도로 저장하는 방식이 마음에 들었다.