github 에 public 으로 공개하는데 공개 하면 안되는 것들이 있습니다.
예를들어 database 정보 같은것들
하지만 push 할때마다 지웠다가 다시 썼다가 하기엔 너무 번거롭습니다.
이를 위해 Jasypt를 사용해 암호화를 할 것입니다.
jasypt 를 적용하기 위해선 먼저 외부 라이브러리를 사용하는 것이기때문에
gradle
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4'
에 jsaypt 라이브러리를 추가해야 합니다.
jasypt:
encryptor:
bean: jasyptStringEncryptor
yml 파일은 다음과 같이 작성 하고
암호화를 해야합니다.
https://www.devglan.com/online-tools/jasypt-online-encryption-decryption
위 사이트에서 암호키를 설정해 자기가 바꾸려는 것을 암호화 시켜주면 됩니다.
암호화 키는 잃어버리면 안됩니다.
그다음 yml 파일에서
username: ENC(ll4zKFuVNixjZ6I+y/0RYQ==)
password: ENC(KdhgHp6Vqy9QNQxC3RGcmNWCoTGCZ3tL)
url: ENC(ZomzDT2uG2jDiy69tMpypGRdc2A/lKVA29lyXd05ugV84uVjO6sq4dMvjYqs5RshGNx3RN11Wo63KzDoN7WchJ8NdbGV+NEApNRsG6zyrnB7z3t1Pb9DwehE2uklzmMMndYWUKdRqeNZ5M6+k6rY9u3u6szRDSLPXmVDFFqwgYpxd1bdaRP++w==)
와 같이 암호화 시킨 암호를 ENC()로 감싸주면 됩니다.
다음은 java 코드입니다.
@Configuration
@EnableEncryptableProperties
public class JasyptConfigDES {
@Value("${jasypt.encryptor.password}")
private String encryptKey;
@Bean(name = "jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(encryptKey);
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
와 같이 설정해주시면 됩니다. 나머지도 yml 파일로 설정 할 수있지만 처음 사용하기에 라이브러리 문서에 가장 대중적인 방법을 선택했습니다.
이제 암호화키를 관리해줘야 하는데 여러가지 방법이있습니다.
다른 파일로 관리하는방법 도 있구요 저는 intellij 에 직접 환경변수를 넣어줬습니다.
1.
가운데 파랑색으로 modify option 을 클릭해주고
-Djasypt.encryptor.password={암호화 키}
를 입력 해주면 됩니다.
systemProperty "jasypt.encryptor.password", project.getProperty("jasypt.encryptor.password")