๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ HTTPS๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ์™€ ์‹ค์ œ ๋ฐฐํฌ ํ™˜๊ฒฝ๊ณผ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” mkcert๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ์ปฌ SSL ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ทธ ์ด์œ ๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1. SSL ์ธ์ฆ์„œ๋ž€?

SSL(Secure Sockets Layer) ์ธ์ฆ์„œ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋””์ง€ํ„ธ ์ธ์ฆ์„œ์ž…๋‹ˆ๋‹ค. HTTPS๋ฅผ ํ†ตํ•ด ์›น์‚ฌ์ดํŠธ์™€์˜ ํ†ต์‹ ์„ ์•”ํ˜ธํ™”ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ฐ€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

 

2. mkcert๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

mkcert๋Š” ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” SSL ์ธ์ฆ์„œ๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ž์ฒด์ ์œผ๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ ๊ธฐ๊ด€(CA)์„ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•จ์œผ๋กœ์จ ๋กœ์ปฌ ์„œ๋ฒ„์—์„œ๋„ HTTPS๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 

3. ์™œ mkcert๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

mkcert๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ๊ฐ„ํŽธํ•จ: ๋ช…๋ น์–ด ๋ช‡ ๊ฐœ๋งŒ์œผ๋กœ ์†์‰ฝ๊ฒŒ SSL ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์‹ ๋ขฐ์„ฑ: ์ƒ์„ฑ๋œ ์ธ์ฆ์„œ๋ฅผ ์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฃจํŠธ ์ €์žฅ์†Œ์— ์ถ”๊ฐ€ํ•˜์—ฌ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋ฅผ ์‹ ๋ขฐํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋กœ์ปฌ ๊ฐœ๋ฐœ ์ตœ์ ํ™”: ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” SSL ์ธ์ฆ์„œ ๊ด€๋ จ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ , ๋ฐฐํฌ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ์กฐ๊ฑด์—์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. Homebrew๋ฅผ ํ†ตํ•ด mkcert ์„ค์น˜ ๋ฐ SSL ์ธ์ฆ์„œ ์ƒ์„ฑ

์ด์ œ Homebrew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ mkcert๋ฅผ ์„ค์น˜ํ•˜๊ณ  SSL ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹จ๊ณ„๋ณ„ ์„ค๋ช…

 

1. Homebrew๋ฅผ ํ†ตํ•ด mkcert ์„ค์น˜

๋จผ์ € Homebrew๋ฅผ ํ†ตํ•ด mkcert๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. Homebrew๋Š” macOS์—์„œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค:

brew install mkcert
 

2. mkcert ์„ค์น˜ ๋ฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฃจํŠธ ์ธ์ฆ์„œ ์ƒ์„ฑ

mkcert ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฃจํŠธ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฃจํŠธ ์ €์žฅ์†Œ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

mkcert -install

์ด ๋ช…๋ น์–ด๋Š” ๋ฃจํŠธ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ์„œ ์ €์žฅ์†Œ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์™€ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋กœ์ปฌ์—์„œ ์ƒ์„ฑํ•œ ์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ SSL ์ธ์ฆ์„œ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

3. mkcert๋กœ SSL ์ธ์ฆ์„œ ์ƒ์„ฑ

์ด์ œ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  SSL ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด localhost์™€ 127.0.0.1์„ ์œ„ํ•œ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

mkcert localhost 127.0.0.1

์ด ๋ช…๋ น์€ localhost+2.pem (์ธ์ฆ์„œ)์™€ localhost+2-key.pem (๋น„๋ฐ€ํ‚ค) ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ๋“ค์„ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ

์ „์ฒด ๊ณผ์ •์˜ ๋ช…๋ น์–ด๋ฅผ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

# Homebrew๋กœ mkcert ์„ค์น˜
brew install mkcert

# mkcert ์„ค์น˜ ๋ฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฃจํŠธ ์ธ์ฆ์„œ ์ƒ์„ฑ
mkcert -install

# ๋กœ์ปฌ ๊ฐœ๋ฐœ์šฉ SSL ์ธ์ฆ์„œ ์ƒ์„ฑ
mkcert localhost 127.0.0.1

iterm ์‹คํ–‰์‚ฌ์ง„

 

 

5. Spring Boot ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •

์ƒ์„ฑ๋œ ์ธ์ฆ์„œ์™€ ํ‚ค ํŒŒ์ผ์„ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์— ๋‘๊ณ , application.properties ๋˜๋Š” application.yml ํŒŒ์ผ์— SSL ์„ค์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

5.1. ์ธ์ฆ์„œ ๋ฐ ํ‚ค ํŒŒ์ผ ์œ„์น˜ ์ง€์ •

์ƒ์„ฑ๋œ localhost+2.pem๊ณผ localhost+2-key.pem ํŒŒ์ผ์„ src/main/resources ํด๋”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

mv localhost+2.pem src/main/resources/
mv localhost+2-key.pem src/main/resources/

5.2. PKCS12 ํ‚ค์Šคํ† ์–ด ์ƒ์„ฑ

Spring Boot๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ PKCS12 ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. OpenSSL์„ ์‚ฌ์šฉํ•˜์—ฌ PEM ํŒŒ์ผ์„ PKCS12 ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค:

openssl pkcs12 -export -in localhost+1.pem -inkey localhost+1-key.pem -out keystore.p12 -name localhost -passout pass:changeit

์ฐธ๊ณ ๋กœ ์ € ์œ„์— changeit ๋ถ€๋ถ„์€ ์ž„์˜๋กœ ์„ค์ •ํ•˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

5.3. ํ‚ค์Šคํ† ์–ด ํŒŒ์ผ ์ด๋™

ํ‚ค ์Šคํ† ์–ด ํŒŒ์ผ์„ ๋‚˜์˜ ํ”„๋กœ์ ํŠธ /src/main/resources/ ์•„๋ž˜์— ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค .

mv keystore.p12 /Users/jake/project/projectname/src/main/resources/

 

์ด๋™์ด ์ž˜ ๋œ๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค.

 

5.4. Spring Boot ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •

application.properties ๋˜๋Š” application.yml ํŒŒ์ผ์— SSL ์„ค์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

application.properties:
server.port=8443
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=changeit
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=localhost
server.ssl.enabled-protocols=TLSv1.2,TLSv1.3
application.yml:
server:
  port: 8443
  ssl:
    key-store: classpath:keystore.p12
    key-store-password: changeit
    key-store-type: PKCS12
    key-alias: localhost
    enabled-protocols: TLSv1.2, TLSv1.3

6. Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰

์„ค์ •์„ ์™„๋ฃŒํ•œ ํ›„ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์—์„œ https://localhost:8443๋กœ ์ ‘์†ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด HTTPS๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

์š”์•ฝ

  1. mkcert ์„ค์น˜: Homebrew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ mkcert ์„ค์น˜.
  2. ๋ฃจํŠธ ์ธ์ฆ์„œ ์„ค์น˜: mkcert์˜ CA๋ฅผ ๋กœ์ปฌ ์‹œ์Šคํ…œ์— ์„ค์น˜.
  3. SSL ์ธ์ฆ์„œ ์ƒ์„ฑ: localhost์™€ 127.0.0.1์šฉ ์ธ์ฆ์„œ ์ƒ์„ฑ.
  4. Spring Boot ์„ค์ •: ์ƒ์„ฑ๋œ ์ธ์ฆ์„œ๋ฅผ PKCS12 ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ Spring Boot ์„ค์ • ํŒŒ์ผ์— ์ถ”๊ฐ€.
  5. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰: HTTPS๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๋ฐ ํ…Œ์ŠคํŠธ.

์ด ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ผ mkcert๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” SSL ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ธ์ฆ์„œ๋Š” Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋‚ด์šฉ์œผ๋กœ ๋‹ค์Œ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„๋“ฏ ํ•ฉ๋‹ˆ๋‹ค. 

 

Spring Boot์—์„œ TLS 1.3์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•œ HTTPS ์š”์ฒญ ๋ณด๋‚ด๊ธฐ