지금 하고 있는 프로젝트에서 Aws Config 를 세팅하는 도중 accessKey 와 secretKey 를 프로퍼티에 등록하려고 한다.
근데 너무 날것(?) 으로 입력하면 보안이슈도 있고... 뭔가 하수같단말이지!!!
그래서 해당값을 Jasypt(Java Simplified Encryption) 를 이용하여 암호화해서 넣어보려한다.
우선 간단하게 암호화해서 입력할수 있도록 간단한 function 작성을 위해 Jasypt 라이브러리 추가
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
그런다음 암호화 함수작성
public static void encProcess() {
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
standardPBEStringEncryptor.setAlgorithm("PBEWithMD5AndDES");
standardPBEStringEncryptor.setPassword("testpw");
String enc = standardPBEStringEncryptor.encrypt("aaa"); // 암호화할 키
System.out.println("Encrypted --> "+ enc);
}
출력
Encrypted --> W98sTo5n/hRme65M+XeJ1Q==
해당출력한 값을 Properties 에 ENC( {} ) 감싸서 붙여넣는다 (그래야 암호화된값이라고 인식을 함)
spring.datasource.username=ENC(cGKairTtgdBzoYHifdvRXA==)
spring.datasource.password=ENC(Zb8ijiQ5TY+e/ptXXXdAVw==)
JasyptConfig.java 작성
@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
@Bean
public StringEncryptor jasyptStringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
String password = System.getProperty("jasypt.encryptor.password");
config.setPassword(password); // 암호화 키 값
config.setAlgorithm("PBEWITHMD5ANDDES"); // 암호 알고리즘
config.setKeyObtentionIterations("1000"); // 해싱 반복 횟수
config.setPoolSize("1"); // Encryptor를 클론하여 가지고 있을 갯수 (기본적인 암복호화땐 1로도 충분)
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // Salt를 생성하는 클래스(보안강화)
//config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator"); // 백터클래스 정의(보안강화)
config.setStringOutputType("base64"); // 인코딩 될 값 hexadecimal도 사용가능
encryptor.setConfig(config);
return encryptor;
}
}
암호화패스워드(jasypt.encryptor.password) 는 보안상 시스템 환경변수로 정의해놓았다.
@EnableEncryptableProperties 이녀석을 써야 application.properties에서 암/복호화가 가능하다.
구동하면 잘된다
-끝-
참조 : https://velog.io/@iniestar/properties-encrypt https://luvstudy.tistory.com/67
'web > SpringBoot' 카테고리의 다른 글
[REST API] Serializable 정말 구현해야 할까? (1) | 2023.10.18 |
---|---|
파일다운로드 시 PDF 워터마크 처리하기 (1) | 2023.10.17 |
HttpOnly + Secure Cookies 생성 (0) | 2023.09.12 |
HTTPS(SSL) 적용 (0) | 2023.09.11 |
Maven VS Gradle (0) | 2023.09.07 |