[Spring Boot] HTTPS 적용하기 (SSL 인증서)

조성우·2024년 5월 11일
0

Spring Boot

목록 보기
7/12
post-thumbnail

HTTPS는 기존 HTTP 프로토콜에 데이터 암호화가 추가된 프로토콜

스프링 부트 프로젝트에서 HTTPS 프로토콜을 적용하는 방법에 대해 알아보자


SSL 인증서 발급

JDK에서 제공하는 keytool을 사용해 Self-Signed Certificate(자체 서명된 인증서)를 발급해보자

그 중 PKCS12 형식으로 생성함 (패스워드로 보호된 형식으로서, 여러 인증서 및 키를 포함할 수 있고, Java 뿐만 아니라 여러 플랫폼에서 사용 가능)

keytool -genkey -alias spring -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 4000
# keystore : 개인키 파일

이후 사용할 패스워드와 정보를 입력하여 keystore 생성을 완료함


application.yml 수정

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(무료 인증서)을 활용하거나 유료 인증서를 발급 받아 해결할 수 있음




※ GitHub Actions 사용 시 ※


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 파일을 추가해주면 됨

0개의 댓글