본문 바로가기

Study/Java

Window 개발 환경에서 https로 Spring Boot Application 개발하기

반응형

Https 환경의 개발이 필요한 경우

요즘은 대부분의 사이트가 Https 로 동작한다.

개발 시 보통 별다른 설정 없이 http로 사용하지만 https로 개발을 하고 싶은 경우가 있다.

https에서만 사용이 허용되는 기능들이 아래와 같이 다양하게 있다.

  • Service Workers
  • Geolocation API
  • Web Push Notifications
  • Credential Management API
  • Payment Request API
  • Web Bluetooth API
  • WebRTC
  • Clipboard API
  • Subresource Integrity
  • Secure Context
  • Cookie Secure Flag

이런 것들을 개발하려고 하면 로컬 개발 환경도 https여야 한다.

보통 localhost 같은 도메인은 별다른 설정을 하지 않아도 브라우저가 기능을 허용해 주는 경우도 있지만 별도 개발용 도메인을 host에 지정하여 사용하는 경우 해당 도메인을 https로 사용하기 위한 방법은 다음과 같다.

로컬 인증서 추가

https://web.dev/articles/how-to-use-local-https?hl=ko

우선 로컬에 인증서를 추가해야 한다.

Scoop 설치

mcert 를 사용하여 인증서를 로컬에 추가할 수 있는데 mcert 를 windows에 설치하려면 package manager인 choco 또는 scoop 을 사용하면 된다.

내 경우 scoop 을 사용하였다.

powershell에서 아래 명령을 실행하여 scoop을 설치한다.

https://scoop.sh/

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

실행한 예는 다음과 같다.

PS C:\Users\bluesky> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
PS C:\Users\bluesky> Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
Initializing...
Downloading...
Creating shim...
Adding ~\scoop\shims to your path.
Scoop was installed successfully!
Type 'scoop help' for instructions.

mkcert 설치

mkcert는 로컬에서 신뢰할 수 있는 개발 인증서를 만드는 간단한 도구이다.
https://github.com/FiloSottile/mkcert

scoop 으로 mkcert 를 다음과 같이 설치한다.

scoop bucket add extras
scoop install mkcert

실행한 예는 다음과 같다.

PS C:\Users\bluesky> scoop bucket add extras
Checking repo... OK
The extras bucket was added successfully.
PS C:\Users\bluesky> scoop install mkcert
Installing 'mkcert' (1.4.4) [64bit] from 'extras' bucket
mkcert-v1.4.4-windows-amd64.exe (4.7 MB) [====================================================================] 100%
Checking hash of mkcert-v1.4.4-windows-amd64.exe ... ok.
Linking ~\scoop\apps\mkcert\current => ~\scoop\apps\mkcert\1.4.4
Creating shim for 'mkcert'.
'mkcert' (1.4.4) was installed successfully!

mkcert 사용

인증서 설치

다음 명령을 실행하면 로컬 인증서를 설치하게 된다.

mkcert -install

인증서 삭제

설치한 인증서를 삭제하려면 다음 명령어를 실행하면 된다.

mkcert -uninstall

인증서 생성

아래처럼 사용할 도메인에 대해 인증서를 생성해 준다.

mkcert "*.bluesky.local" "*.cloud.bluesky.local" "*.api.bluesky.local" "*.web.bluesky.local"

실행한 위치에 [인증서이름].pem , [인증서이름]-key.pem 2개의 파일이 생성된다.
이름을 따로 지정하지 않은 경우 등록할 첫 번째 도메인 외 몇 개라는 형태로 인증서 이름이 생성된다.

위 예제의 경우 _wildcard.bluesky.local+1.pem , _wildcard.bluesky.local+1-key.pem 와 같은 이름으로 생성되었다.

다만 Spring Boot에서 사용하는 경우 pkcs12로 인증서를 지정해서 사용한다.

앞의 생성을 사용하지 않고 다음처럼 -pkcs12 매개변수를 추가하여 생성한다.

mkcert -pkcs12 "*.bluesky.local" "*.cloud.bluesky.local" "*.api.bluesky.local" "*.web.bluesky.local"

.p12 라는 이름의 인증서가 생성된다.
앞서와 동일하게 이름이 지정되어 위 예제의 경우 _wildcard.bluesky.local+1.p12 라는 이름의 인증서가 생성되었다.

생성하면 다음과 같은 안내를 확인할 수 있다.
(비밀번호 지정하지 않아 기본 비밀번호인 changeit 으로 지정되었다고 안내하고 있다.)

Created a new certificate valid for the following names 📜
 - "*.bluesky.local"
 - "*.cloud.bluesky.local"
 - "*.api.bluesky.local"
 - "*.web.bluesky.local"

Reminder: X.509 wildcards only go one level deep, so this won't match a.b.bluesky.local ℹ️

The PKCS#12 bundle is at "./_wildcard.bluesky.local+3.p12" ✅

The legacy PKCS#12 encryption password is the often hardcoded default "changeit" ℹ️

It will expire on 5 April 2027 🗓

spring boot application에서 해당 인증서 사용을 지정해 주면 된다.

대상 프로젝트로 인증서를 옮기고 아래처럼 설정을 지정하여 사용할 수 있다.

server.ssl.key-store=C:\\Users\\bluesky\\_wildcard.bluesky.local+3.p12
server.ssl.key-store-type=PKCS12
server.ssl.key-store-password=changeit

하나의 인증서로 여러 프로젝트에서 일괄 사용하려는 경우 외부 변수로 공통 지정하는 방법을 선택하면 된다.

-Dserver.ssl.key-store=C:\\Users\\bluesky\\_wildcard.bluesky.local+3.p12 -Dserver.ssl.key-store-type=PKCS12 -Dserver.ssl.key-store-password=changeit

추가 팁

인증서가 적용되었는지 브라우저에서 확인할 때 새로고침이 아닌 새 탭이나 새창에서 확인해야 한다.
기존 창에서는 변경된 인증서가 반영되지 않는다.

반응형