깃헙 액션을 위해서 설정 파일(application-dev.yml)을 공개해야하는 상황이다.
하지만 비밀키나 비밀번호가 있기 때문에 보안을 생각해야 한다.
그래서 Jsaypt(Java Simplified Encryption) 를 도입해보도록 하겠다!
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
implementation 'org.bouncycastle:bcprov-jdk16:1.46'
서버 구동 시 암복호화 설정 주입을 한다.
@Configuration
public class JasyptConfig {
@Value("${jasypt.encryptor.password}")
private String encryptKey;
@Bean("encryptorBean")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setProvider(new BouncyCastleProvider());
encryptor.setPoolSize(1);
encryptor.setPassword(encryptKey);
encryptor.setAlgorithm("PBEWithSHA256And128BitAES-CBC-BC");
return encryptor;
}
}
pool size는 머신 코어 수와 동일하게 설정하는 게 좋다고 한다.
빈 이름 명시하기
jasypt:
encryptor:
bean: encryptorBean
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setProvider(new BouncyCastleProvider());
encryptor.setPoolSize(2);
encryptor.setPassword("password");
encryptor.setAlgorithm("PBEWithSHA256And128BitAES-CBC-BC");
String plainText = "test";
String encryptedText = encryptor.encrypt(plainText);
String decryptedText = encryptor.decrypt(encryptedText);
System.out.println("Enc: " + encryptedText + ", Dec: " + decryptedText);
설정 파일에 암호화한 값을 작성해주면 된다. (ENC(~))
secret_key: ENC([암호화된 값])
-Djasypt.encryptor.password=암호화할키