YS's develop story

springboot certbot으로 ssl인증서 받아서 https로 배포하기 본문

Spring

springboot certbot으로 ssl인증서 받아서 https로 배포하기

Yusang 2023. 11. 30. 11:12

 

 

ssl 인증서를 받기 위해서는 등록할 도메인이 필요합니다.

그래서 저는 가비아에서 1900짜리 제일 싼 도메인을 1년 구매했습니다.

그리고 배포한 인스턴스의 주소를 등록해 주었습니다.

 

 

 

https://certbot.eff.org/instructions?ws=other&os=ubuntufocal

 

Certbot Instructions

Tagline

certbot.eff.org

 

저는 gcp 인스턴스에서 spring 프로젝트를 배포하고 있었고

운영체제는 ubuntu 20이었기에 아래처럼 선택했습니다.

올바르게 위 사이트에서 선택을 해서 따라 하면 됩니다.

 

 

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot certonly --standalone

 

사이트에서 알려주는 방법대로 쭉 따라 하고 저는 --standalone 방법을 선택했습니다.

 

이메일을 입력하고 도메인을 입력하라는 메시지가 나오면 입력하면 됩니다.

그 후 파일이 저장된 경로가 나오고 그 경로로 이동해야 합니다.

 

그 후 아래 명령어를 통해 keystore.p12 파일을 얻어야 합니다.

이때 입력하라고 한 비밀번호를 기억하고 있어야 합니다.

 openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name name -CAfile chain.pem -caname root

 

 

 

그럼 아래처럼 keystore.p12 파일이 생성된 걸 확인할 수 있습니다.

이제 이 파일을 파일 다운로드를 통해 내 컴퓨터로 가져와야 합니다.

이때 주의 해야 할 점이 있습니다. 파일과 파일의 하위 폴더 모두 읽기 권한이 없기 때문에

chmod 777 명령어를 통해 설정을 바꿔야 합니다.

저는 이때 구글에서 따로 메시지를 안 알려주고 다운로드를 할 수 없다고

에러만 나서 원인을 찾는데 시간이 걸렸습니다.

원인은 다운로드하려는 파일만 읽기 권한을 주고 하위 폴더에 읽기 권한을 주지 않아서였습니다. 

 

 

이렇게 가져온 인증서를 아래와 같이 spring프로젝트 resoureces 하위에 넣고

 

 

yml파일에 아래와 같이 추가하면 됩니다.

이때 비밀번호는 위에서 입력한 비밀번호입니다.

참고로 same-site : None 이 코드는 쿠키 관련 코드니 필요 없어도 됩니다. 

저는 사용하고 있는 프로젝트에서 필요하기에 저는 추가했습니다.

server:
  servlet:
    session:
      cookie:
        same-site: None
  ssl:
    key-store: classpath:keystore.p12
    key-store-type: PKCS12
    key-store-password: 123456

 

 

저는 도커 이미지로 배포하고 있었기에 아래와 같이 도커파일을 수정해서 

도커 이미지를 생성해서 도커허브에 다시 올렸습니다.

FROM openjdk:17-jdk-slim-buster
COPY build/libs/yanolja-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
# 작업 디렉토리 생성
WORKDIR /app

# 소스 코드 및 .env 파일 복사
COPY . .

# .env 파일을 WORKDIR로 복사
COPY .env .env

# keystore.p12 파일을 WORKDIR로 복사
COPY src/main/resources/keystore.p12 keystore.p12

ENTRYPOINT ["java", "-jar", "/app.jar"]

 

 

그리고 gcp에서 도커를 다시 실행시키고 api를 확인해 보았습니다.

https 인증이 아주 잘 되고 있는 걸 확인할 수 있습니다!

Comments