모입(Molip) - ZeroSSL을 이용한 HTTPS SSL 인증서 갱신

박민수·2024년 10월 6일
post-thumbnail

개요

현재 모입 사이트는 ZeroSSL을 이용하여 무료 SSL 인증서를 발급받아 사용중이다. ZeroSSL의 무료 버전 인증서는 유효기간이 90일로 제한되어 있어 정기적인 갱신이 필요하다. 며칠 전부터 인증서의 유효기간이 얼마 남지 않았다는 갱신 알림 이메일을 여러 차례 받았다.

처음 인증서를 발급받을 때와 마찬가지로, 이번에 재갱신을 시도하면서 과정이 다소 복잡하게 느껴졌고, 이전의 세부 과정들을 대부분 까먹어서 시간이 많이 소요되었다. 다음 갱신 때는 시간을 절약하고 수월하게 갱신할 수 있도록 이번 재갱신 과정을 정리해보고자 한다.

SSL 인증서 발급(갱신)

갱신 알림 이메일에 Renew Certificate를 클릭하면 ZeroSSL 인증서 관리 페이지로 넘어간다.

갱신하고자 하는 인증서의 우측 Renew 버튼을 클릭한다.

선택한 인증서가 적용될 도메인을 확인한다.

이후 도메인의 소유자인지 확인하는 과정이 필요하다. HTTP File Upload 방식이 비교적 쉬운 방법이기 때문에 이를 활용하여 인증을 진행하였다. Download Auth File 버튼을 클릭하여 인증 파일을 다운로드하고, 인증 요구에 맞게 웹 서버에서 요청을 처리할 수 있도록 설정한다.

HTTP File Upload를 통해 인증하는 방법
1. 프로젝트 폴더의 resources/static/.well-known/pki-validation 경로에 다운로드 받은 인증 파일을 위치시킨다.
2. 이후 로컬에서 http://localhost:8080/.well-known/pki-validation/{인증파일이름}.txt 경로에 요청을 보내 응답을 정상적인지 확인한다.
3. 로컬에서 확인이 되면, 새로 빌드 후 배포하여 3번 스텝에서 요청하는 정확한 경로로 요청이 올 때 인증 파일이 정상적으로 응답하는지 확인한다.
4. 정상적으로 응답한다면 Next Step 버튼을 클릭 하여 도메인 검증을 진행한다.

검증이 완료되면, 인증서 파일들을 다운로드할 수 있다.

OpenSSL 설치 및 설정

Java 기반 애플리케이션, 특히 스프링 부트(Spring Boot)와 같은 환경에서는 SSL 인증서를 JKS 형식으로 변환해야 서버가 이를 인식하고 HTTPS 보안 연결을 설정할 수 있다. ZeroSSL에서 발급받은 인증서는 기본적으로 PEM 형식으로 제공되기 때문에 Java 환경에서 바로 사용할 수 없어서 변환 과정이 필요하다. 다운로드한 SSL 인증서를 Java Keystore(JKS) 형식으로 변환하려면 OpenSSL이 필요하다.

Windows에는 기본적으로 OpenSSL이 설치되어 있지 않아서 SSL 인증서를 변환하기 위해 수동으로 설치해야한다.

OpenSSL 다운로드 및 설치

  1. Win64 OpenSSL 설치 파일을 다운로드하고 설치한다.
    • 설치 경로는 기본적으로 C:\Program Files\OpenSSL-Win64로 지정된다.

환경 변수 설정

OpenSSL 명령어를 사용하기 위해 환경 변수에 OpenSSL 설치 경로를 추가해야 한다.

  1. 시스템 속성에서 고급 시스템 설정으로 이동하고, 환경 변수를 클릭한다.
  2. Path 시스템 변수C:\Program Files\OpenSSL-Win64\bin 경로를 추가한다.
  3. 설정을 완료한 후 CMD를 새로 열어 openssl version 명령어를 입력하여 설치가 제대로 되었는지 확인한다.

SSL 인증서를 Java keystore로 변환

다운로드한 인증서 파일을 Java Keystore(JKS) 형식으로 변환하는 과정은 두 단계로 나뉜다. 첫 번째 단계는 PKCS12 형식으로 변환하고, 두 번째 단계는 이를 JKS 형식으로 변환하는 것이다.

1. 인증서를 PKCS12 형식으로 변환

먼저, cmd를 열어 인증서 파일들이 위치한 폴더로 이동한 후, OpenSSL 명령어를 이용하여 SSL 인증서와 개인 키를 하나의 PKCS12 파일로 병합한다.

openssl pkcs12 -export -out keystore.p12 -inkey private.key -in certificate.crt -certfile ca_bundle.crt

이 명령어를 실행하면 비밀번호를 설정하라는 메시지가 나타난다. 이 비밀번호는 나중에 필요 하기 때문에 잘 기억해두어야 한다.

비밀번호를 두 번 입력한 후 keystore.p12 파일이 생성되며, 이 파일을 프로젝트의 classpath에 넣어준다.

2. SpringBoot 설정에서 Keystore 사용

스프링 부트 애플리케이션에서 Java Keystore를 사용하도록 설정하려면 application.yml 파일에 다음과 같은 내용을 추가한다.

server:
  ssl:
    key-store: classpath:keystore.p12
    key-store-password: ${입력한 비밀번호}
    key-store-type: PKCS12
  port: 443

이 설정을 통해 스프링 부트 서버는 HTTPS 포트(443)에서 SSL 인증서를 사용하여 안전하게 요청을 처리하게 된다.


마무리

이제 모든 설정이 완료되었으므로 도메인 주소로 접속하여 SSL 인증서가 정상적으로 적용되었는지 확인할 수 있다.

profile
안녕하세요 백엔드 개발자입니다.

0개의 댓글