
HTTPS는 기존 HTTP 프로토콜에 데이터 암호화가 추가된 프로토콜
스프링 부트 프로젝트에서 HTTPS 프로토콜을 적용하는 방법에 대해 알아보자
JDK에서 제공하는 keytool을 사용해 Self-Signed Certificate(자체 서명된 인증서)를 발급해보자
그 중 PKCS12 형식으로 생성함 (패스워드로 보호된 형식으로서, 여러 인증서 및 키를 포함할 수 있고, Java 뿐만 아니라 여러 플랫폼에서 사용 가능)
keytool -genkey -alias spring -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 4000
# keystore : 개인키 파일
이후 사용할 패스워드와 정보를 입력하여 keystore 생성을 완료함
server:
  port: 443
  ssl:
    key-store: keystore.p12
    key-store-password: your-password
    key-store-type: PKCS12
필수적인 요소는 위 ssl의 3가지 항목임
먼저 포트를 443으로 수정함으로서 HTTPS로 서버에 접근하도록 하며, ssl에서 방금 생성한 keystore, password, type을 입력해주면 됨
(keystore 파일을 resources 폴더로 옮기고 classpath:keystore.p12로 지정해주어도 됨)
위 두 작업으로 HTTPS 적용은 끝남


하지만 위처럼 '주의 요함' 혹은 경고 페이지를 만날 수 있음
Self-Signed Certificate(자체 서명된 인증서)이기 때문인데, 추후 Certbot(무료 인증서)을 활용하거나 유료 인증서를 발급 받아 해결할 수 있음
1. keystore
아래 명령을 통해 base64로 인코딩한 뒤,
openssl base64 -in [keystore file]  -out [base64 file]
이를 Actions Secrets에 저장하여,

CI/CD 과정에서 keystore 파일을 생성해줌
echo ${{ secrets.KEYSTORE_BASE64 }} | base64 -d > keystore.p12
2. application.yml
application-ssl.yml
server:
  ssl:
    key-store: keystore.p12
    key-store-password: your-password
    key-store-type: PKCS12
password를 포함한 ssl 정보도 따로 Secrets로 관리하는 것이 좋을 듯함

이후 기존 application.yml 파일에는 아래처럼 설정함
spring:
  profiles:
    include:
      - ...
      - ssl
Actions Workflow 파일

echo "${{ secrets.APPLICATION_SSL_YML }}" > ./src/main/resources/application-ssl.yml
위처럼 불러와 yml 파일을 추가해주면 됨