1. keyStore 생성
- 터미널을 열고 아래의 코드 입력한다. 코드를 입력하면 비밀번호를 설정하고 순서에맞게 차례로 작성하면 된다.
keytool -genkey -alias {생성할 키스토어 이름} -keyalg RSA -keystore {생성할 키스토어 파일이름}.jks
2. Key-Store에서 인증서 추출
- 아래의 코드 입력 이후 비밀번호 입력
keytool -export -alias {생성된 키스토어 이름} -keystore {생성된 키스토어 파일이름(.jks까지 작성)} -rfc -file {생성할 인증서 파일이름}.cer
3. Trust-Store 생성
- 아래의 코드 입력 이후 비밀번호 입력
keytool -import -alias {생성할 Store 이름} -file {생성된 인증서 파일명{.cer까지 작성)} -keystore {생성할 Store 파일이름}.ts
4. springboot yml파일 수정
server:
port: 8090 #Https port
ssl:
enabled: true
key-store: {경로}/calenduck.jks # 1번에서 생성한 Key store 경로와 파일명을 적어줍니다.
key-store-password: {비밀번호} # 1번에서 생성한 Key store의 비밀번호를 적어줍니다.
key-password: {비밀번호} # 1번에서 생성한 키스토어의 마지막의 키 비밀번호
key-alias: calenduck # 키 스토어 이름
trust-store: {경로}/calenduck.ts # 2번에서 생성한 Trust-Store 경로
trust-store-password: {비밀번호} # Trust-Store 비밀번호
yml파일을 설정하고 springboot를 실행하면 https와 설정한 포트번호가 실행된 것을 볼 수 있고 요청 또한 https로 보내야한다. 하지만 로컬에서 자체적으로 인증한 키를 사용하기에 보안 경고가 아래와 같이 발생할 것이다.
그러면 어떻게 경고를 없애는지?
- 자체적이 아닌 기관에서 인증서를 발급받기위해 일정 비용을 내야하지만 Let's Encrypt라는 비영리 기관에서 무료로 가능하다고한다.
1. certbot 설치
sudo apt install certbot
2. 인증서 발급
- 아래의 코드를 입력하면 https를 적용할 도메인을 입력하라고 하는데 일반적으로 ip주소를 직접적으로 입력할 수 없다고 한다. 그러니 무료나 유료로 도메인 주소를 구입해놔야 할 것 같다
sudo certbot certonly --standalone
발급이 성공하면 /etc/letsencrypt/live/도메인 경로에 fullchain.pem 그리고 privkey.prem이 발급되었다고 나온다. root계정으로 해당 경로에 이동한다. (sudo -s)
3. 형식 변경
.pem은 스프링부트에서 인식하지 못한다. pem -> PKCS12 형식 변경
명령어 실행 이후 비밀번호 설정
sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out {이름.p12} -name ttp -CAfile chain.pem -caname root
4. springboot 설정
위에서 생성된 {이름.p12} 파일을 springboot의 resources/ssl 경로에 넣어줘야함. 그리고 yml 파일 설정
server:
port: 443
ssl:
key-store: classpath:ssl/{3번에서 설정한 이름.p12}
key-store-type: PKCS12
key-store-password: {3번에서 설정한 비밀번호}
5. ec2 보안 부분에서 443 포트 열기
5번까지 완료하면 https에대한 설정은 끝이다. 하지만 발급한 ssl 인증서는 90일 동안만 사용 가능하기에 자동 갱신을 설정해두면 편할 듯 하다.
- crontab -l
- crontab -e
1번과 2번을 실행해 편집모드로 들어가 0 2 1 * * /usr/bin/certbot renew 매달 1일에 갱신하는 등 원하는 날로 지정하면 정말로 끝이다.
'Spring' 카테고리의 다른 글
[SpringBoot] flyway와 DB migration 해야하는 이유 (0) | 2023.09.23 |
---|---|
[Spring] EC2에 Prometheus & Grafana 적용 (0) | 2023.07.18 |
Spring - MVC 패턴 (0) | 2023.03.08 |
Spring - 입문 (0) | 2023.02.24 |