๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ HTTPS๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋ณด์ ํ
์คํธ์ ์ค์ ๋ฐฐํฌ ํ๊ฒฝ๊ณผ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ฒ ํฌ์คํธ์์๋ mkcert
๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ขฐํ ์ ์๋ ๋ก์ปฌ SSL ์ธ์ฆ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ทธ ์ด์ ๋ฅผ ์์ธํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
1. SSL ์ธ์ฆ์๋?
SSL(Secure Sockets Layer) ์ธ์ฆ์๋ ์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ์์ ํ๊ฒ ํต์ ํ ์ ์๋๋ก ํ๋ ๋์งํธ ์ธ์ฆ์์ ๋๋ค. HTTPS๋ฅผ ํตํด ์น์ฌ์ดํธ์์ ํต์ ์ ์ํธํํ๊ณ , ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๊ธฐ๋ฐ์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
2. mkcert๋ ๋ฌด์์ธ๊ฐ?
mkcert๋ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ ๋ขฐํ ์ ์๋ SSL ์ธ์ฆ์๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ์ ๋๋ค. ์์ฒด์ ์ผ๋ก ์ ๋ขฐํ ์ ์๋ ์ธ์ฆ ๊ธฐ๊ด(CA)์ ์์ฑํ๊ณ , ์ด๋ฅผ ํตํด ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํจ์ผ๋ก์จ ๋ก์ปฌ ์๋ฒ์์๋ HTTPS๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
3. ์ mkcert๋ฅผ ์ฌ์ฉํ๋๊ฐ?
mkcert๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ฐํธํจ: ๋ช ๋ น์ด ๋ช ๊ฐ๋ง์ผ๋ก ์์ฝ๊ฒ SSL ์ธ์ฆ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ์ ๋ขฐ์ฑ: ์์ฑ๋ ์ธ์ฆ์๋ฅผ ์์คํ ์ ์ ๋ขฐํ ์ ์๋ ๋ฃจํธ ์ ์ฅ์์ ์ถ๊ฐํ์ฌ, ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฅผ ์ ๋ขฐํ๋๋ก ์ค์ ํฉ๋๋ค.
- ๋ก์ปฌ ๊ฐ๋ฐ ์ต์ ํ: ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋ฐ์ํ ์ ์๋ 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
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๋ฅผ ํตํด ์คํ๋๋์ง ํ์ธํฉ๋๋ค.
์์ฝ
- mkcert ์ค์น: Homebrew๋ฅผ ์ฌ์ฉํ์ฌ mkcert ์ค์น.
- ๋ฃจํธ ์ธ์ฆ์ ์ค์น: mkcert์ CA๋ฅผ ๋ก์ปฌ ์์คํ ์ ์ค์น.
- SSL ์ธ์ฆ์ ์์ฑ:
localhost
์127.0.0.1
์ฉ ์ธ์ฆ์ ์์ฑ. - Spring Boot ์ค์ : ์์ฑ๋ ์ธ์ฆ์๋ฅผ PKCS12 ํ์์ผ๋ก ๋ณํํ์ฌ Spring Boot ์ค์ ํ์ผ์ ์ถ๊ฐ.
- ์ ํ๋ฆฌ์ผ์ด์
์คํ: HTTPS๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์คํ ๋ฐ ํ
์คํธ.
์ด ๋จ๊ณ๋ฅผ ๋ฐ๋ผ mkcert๋ฅผ ์ค์นํ๊ณ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ๋ขฐํ ์ ์๋ SSL ์ธ์ฆ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์์ฑ๋ ์ธ์ฆ์๋ Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฐ๊ฒฐ๋์ด ์๋ ๋ด์ฉ์ผ๋ก ๋ค์ ํฌ์คํ ์ ์ฐธ๊ณ ํ๋ฉด ์ข์๋ฏ ํฉ๋๋ค.
Spring Boot์์ TLS 1.3์ ์ฌ์ฉํ์ฌ ์์ ํ HTTPS ์์ฒญ ๋ณด๋ด๊ธฐ