기존에 운영중인 서비스에 적용된 암호화 알고리즘이 취약하다는 결과를 받았다.
확인해보니 jasypt을 이용해 암호화가 진행되거 있었고
라이브러리 버전이 낮아 지원되는 알고리즘은 안전하지 못했다.. !
jasypt 버전을 올리려고보니.. SpringBoot 나 기타 다른 서비스의 버전도 올려줘야하는 부분이 있어
곤란해졌다. ( 운영중인 서비스로 리스크가 있어 여러가지 버전을 한번에 올리기가 애매한 상황.. )
다른 버전은 건들지 않고
bouncycastle을 추가 적용해보니 더 많은 안전한 알고리즘 사용이 가능했다!
그럼 조치 시작~
1. lib 폴더에 bcprov-jdk15on-1.60.jar 추가 ( 첨부파일 확인 )

2. pom.xml Bouncycastle 추가
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
<scope>system</scope>
<systemPath>${basedir}/lib/bcprov-jdk15on-1.60.jar</systemPath>
</dependency>
3. jasyptConfig.java
* 사용가능한 알고리즘 목록 조회
List<Object> supported = new ArrayList<>();
List<Object> unsupported = new ArrayList<>();
for (Object algorithm : AlgorithmRegistry.getAllPBEAlgorithms()) {
try {
StandardPBEStringEncryptor encryptor1 = new StandardPBEStringEncryptor();
encryptor1.setPassword("somePassword");
encryptor1.setAlgorithm(String.valueOf(algorithm));
String str = "test";
String encStr = encryptor1.encrypt(str);
String decStr = encryptor1.decrypt(encStr);
supported.add(algorithm);
} catch (EncryptionOperationNotPossibleException e) {
unsupported.add(algorithm);
}
}
for (Object s : supported) {
System.out.println(s);
}
- 1) 암호화
private static final String ENCRYPT_KEY = "asdasdasdasdasdasdassdwwwdd11wq";
@Test
public void test () {
Security.addProvider(new BouncyCastleProvider());
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
config.setPassword(ENCRYPT_KEY);
config.setAlgorithm("PBEWITHSHA256AND256BITAES-CBC-BC");
encryptor.setConfig(config);
String url = encryptor.encrypt("jdbc:oracle:thin:@192.168.11.123:1521/ORCL");
String username= encryptor.encrypt("testid");
String pass = encryptor.encrypt("dbpassword");
System.out.println(url);
System.out.println(username);
System.out.println(pass);
// decrypt 테스트
System.out.println(encryptor.decrypt(url));
}
=== run as > JUnit Test 실행
콘솔에서 암호화된 값을 확인할 수 있다.
- 2) 적용
@Bean("JasyptStringEncryptor")
public StandardPBEStringEncryptor stringEncryptor() {
Security.addProvider(new BouncyCastleProvider());
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
config.setPassword(ENCRYPT_KEY);
config.setAlgorithm("PBEWITHSHA256AND256BITAES-CBC-BC");
encryptor.setConfig(config);
return encryptor;
}
application.properties 암호화된 값 입력
spring.datasource.url=ENC(asdasdasdwwe2123123qewqwe+o46dbmkQpVu20=)
spring.datasource.username=ENC(sfsdfsr342343456efgfgdfdd==)
spring.datasource.password=ENC(gggffrrww+WbWPoAMddlLrkXFcE)
boot 실행 후 DB 연결이 잘 되는지 확인하기
끝!
관련내용)
genie-dev.tistory.com/50?category=915648
jasypt를 이용한 DB 접속 정보 암호화 방법
DB 접속 정보를 암호화 하는 이유 프로젝트 내 DB 연결 값을 암호화 하지 않고 그대로 올릴 경우 서버에 직접 접근하지 않는 이상 확인하기 어렵겠지만 접속이 가능하다면 누구나 DB 정보를 확인��
genie-dev.tistory.com
'Spring' 카테고리의 다른 글
| Spring 특정 URL만 encoding 다르게 처리하기 (0) | 2021.01.21 |
|---|---|
| SpringBoot robots.txt 적용 (0) | 2020.12.14 |
| Springboot Jar systemctl로 실행하기! ( 백그라운드 실행 ) (0) | 2020.10.08 |
| jasypt를 이용한 DB 접속 정보 암호화 방법 (0) | 2020.09.14 |
| SpringBoot 백그라운드 실행 (nohup 사용법) (0) | 2020.09.10 |
