Symmetric, Asymmetric
symmetric은 대칭키로 암호화된 키로 복호화를 하면 값을 얻어 올수 있다.
Asymmetric은 비대칭키로 공개키(public key)와 개인키(private key)가 하나의 쌍을 이루고 있다.다른사람에게 공개된 키로서 정보를 암호화 할수있는 공개키와 본인만 알고 있어 암호를 풀 수 있는 개인키이다. 간단히 말해 암호화할때 키와 복호화 할때 키가 다르면 비대칭키다. 여기서 사용할 비대칭키의 알고리즘은 RSA를 사용한다. RSA란 공개키 암호화 시스템중 하나로 공개키는 public,private키를 같이 사용하는 공개키 암호시스템이라고 하는데 암호화뿐 아니라 전자서명에서도 가능한 세계최초 암호화알고리즘이라고 한다.
대칭키보다 조금더 복잡한 비대칭키를 구현해 보자.
암호화를 할때 public를 썻으면 복호화 할땐 private으로 써줘야한다.
공개키와 비공개키를 생성한다.
키를 생성하기 위해 jdk의 keytool을 사용한다. keytool을 사용할때 이 키를 사용한다는 부가적인 정보를 넣어야한다.
키파일을 저정할 폴더를 생성하고 터미널을 열어
keytool -genkeypair -alias apiEncryptionKey -keyalg RSA -dname "CN=by lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR" -keypass "test1234" -keystore apiEncryptionKey.jks -storepass "test1234"
이 명령어를 입력한다 명령어를 살펴보면,
-keyalg는 키를 생성하는 알고리즘으로 RSA를 쓴다는 뜻.
-keypass 는 키를 생성할 비밀번호를 입력한다.
-keystore apiEncryptionKey.jks는 apiEncryptionKey.jks라는 파일에 키가 생성된다.
-storepass는 생성한 키파일의 패스워드를 입력한다.
키파일 생성한 폴더를 열어보면 위에서 명령어로 생성한 apiEncryptionKey.jks 파일이 생성되어있는걸 볼 수 있다.
생성된 파일을 열어보면
암호화가된 키를 볼수있다. 이렇게 비공개키를 만들었고 인증서를 만들어보자
trustServer.cer -> 인증서 파일
인증서 파일이 만들어진걸 확인하고 공개키를 만들어보면
마지막라인의 질문에 yes를 입력하면 공개키가 만들어진다.
pulbicKey.jks를 보면 trustedCertEntry가 생성되었고
apiEncryptionKey.jsk를 보면 privateKeyEntry가 생성된걸 볼 수 있다.
그리고 trustServer.cer까지 인증서 파일도 있고 공개키 비공개키 인증서까지 만들었다.
생성한 비공개키를 마이크로서비스들의 yml설정들을 한곳에 모아서 처리할수있는 중앙처리장치인 곳의 bootstrap.yml파일에
encrypt:
key-store:
location: file://${user.home}/downloads/study/keystore/apiEncryptionKey.jks # 비공개키파일을 생성한 폴더 경로
password: test1234 # 비공개키를 만들때 설정한 비밀번호
alias: apiEncryptionKey #비공개키를 만들때 설정한 닉네임
이 설정을 넣어주고
깃저장소에 저장해둔 yml설정 파일에 h2 database에 설정한 비밀번호를 암호화 해서 두면 된다.
{cipher}를 꼭 붙여주어야한다. 그렇지 않으면 저 암호화된 키들이 그냥 평문화가 되어버린다.
이런걸 하는 이유는 누군가 이 설정파일을 열어보았을때 비밀번호나 이런 정보들이 그냥 입력되어 있으면 악용을 할 수 있기 때문에 암호화가된걸 입력해서 보안을 강화하기 위함이다.