
์๋
ํ์ธ์~ ๐
์ค๋์ Spring Boot์์ HTTPS๋ฅผ ์ ์ฉํ๊ฑฐ๋ HTTP/2.0์ ํ
์คํธํ ๋ ๊ผญ ํ์ํ
"self-signed ์ธ์ฆ์"๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ ค๊ณ ํด์!
๊ทผ๋ฐ... keytool ๋ช
๋ น์ด ๋ณด๋ฉด ๋ญ๊ฐ ๋๋ฌด ๋ณต์กํ๊ฒ ์๊ฒผ์ฃ ?
๊ฑฑ์ ๋ง์ธ์. ์ค๋์ ๊ทธ๊ฑธ ์์ฃผ ์ฝ๊ฒ ํ์ด๋๋ฆด๊ฒ์!
๐งฉ ๋จผ์ , ์ด๊ฑด ๋ญํ๋ ๋ช
๋ น์ด๋๋ฉด?
keytool -genkeypair ...
์ด ๋ช
๋ น์ด๋ Java์์ ์ ๊ณตํ๋ keytool์ด๋ผ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์
"์ธ์ฆ์๊ฐ ๋ค์ด์๋ ํ์ผ(= keystore)"์ ํ๋ ๋ง๋๋ ์์
์ด์์.
Spring Boot์์ HTTPS๋ฅผ ์ธ ๋๋
๐ “์ด ์๋ฒ๊ฐ ์ง์ง ๋ด๊ฐ ์ ์ํ๋ ค๋ ์๋ฒ์ธ์ง?”
๋ฅผ ์ฆ๋ช
ํ ์ ์๋ ์ธ์ฆ์ ํ์ผ(p12)์ด ํ์ํฉ๋๋ค.
โ
์ค์ ๋ช
๋ น์ด๋ ์ด๋ ์ต๋๋ค:
keytool -genkeypair \
-alias my-local-cert \
-keyalg RSA \
-keysize 2048 \
-storetype PKCS12 \
-keystore keystore.p12 \
-validity 3650 \
-storepass 123456 \
-keypass 123456 \
-dname "CN=localhost, OU=Dev, O=Local, L=Seoul, ST=Seoul, C=KR"
๐ ๋ช
๋ น์ด๊ฐ ๊ธธ์ง๋ง, ์ฌ์ค ํ๋ํ๋ ๋ค ์๋ฏธ๊ฐ ์์ด์.
์๋์์ ์ฝ๊ฒ ์ค๋ช
ํด๋๋ฆด๊ฒ์!
๐ ์ต์
ํ๋ํ๋ ์น์ ํ๊ฒ ์ค๋ช
ํด๋๋ฆด๊ฒ์!
์ต์
์ค๋ช
-genkeypair ๊ณต๊ฐํค + ๋น๊ณต๊ฐํค ์์ ์์ฑ (์ฆ, ์ธ์ฆ์ ๋ง๋ค๊ธฐ!)
-alias my-local-cert : ์ด ์ธ์ฆ์์ ๋ถ์ผ ์ด๋ฆ (๋ณ๋ช
). Spring Boot ์ค์ ์์๋ ์ด ์ด๋ฆ์ ์จ์
-keyalg RSA : ์ด๋ค ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ธ ๊ฑด์ง (๋๋ถ๋ถ RSA๋ฅผ ์๋๋ค)
-keysize 2048 : ์ํธํ ํค์ ๊ธธ์ด (2048๋นํธ๊ฐ ์ ๋นํ ์์ ํ๊ณ ์ผ๋ฐ์ !)
-storetype PKCS12 : ์ ์ฅ ๋ฐฉ์. PKCS12๋ Spring Boot์์ ์ฝ๊ฒ ์ธ์ํ ์ ์๋ ํ์์ด์์
-keystore keystore.p12 : ์ต์ข
๊ฒฐ๊ณผ๋ฌผ๋ก ๋ง๋ค์ด์ง ์ธ์ฆ์ ํ์ผ ์ด๋ฆ
-validity 3650 : ์ธ์ฆ์ ์ ํจ๊ธฐ๊ฐ (์ฌ๊ธฐ์ 3650์ผ = 10๋
!)
-storepass 123456 : ์ธ์ฆ์ ํ์ผ(p12)์ ์ด๊ธฐ ์ํ ๋น๋ฐ๋ฒํธ
-keypass 123456 : ๋ด๋ถ ํค์ ๋ํ ๋น๋ฐ๋ฒํธ (๋ณดํต storepass๋ ๋๊ฐ์ด ํด๋ OK)
-dname "..." " ์ธ์ฆ์์ ๋ค์ด๊ฐ ์ ์ ์ ๋ณด (์๋์์ ์์ธํ ์ค๋ช
ํ ๊ฒ์!)
๐ค -dname ์ ์ ์ ์ ๋ณด ๊ตฌ์ฑ๋ ์ค๋ช
ํด๋๋ฆด๊ฒ์!
-dname ์์ ์๋ ๋ฌธ์์ด์ ์ธ์ฆ์์ ๋ด๊ธธ ์ฃผ์ธ์ ์ ๋ณด์์:
CN=localhost, OU=Dev, O=Local, L=Seoul, ST=Seoul, C=KR
ํญ๋ชฉ ์๋ฏธ
CN=localhost : Common Name. ์ธ์ฆ์์ ๋๋ฉ์ธ ์ด๋ฆ! (๋ก์ปฌ ํ
์คํธ๋๊น localhost)
OU=Dev : ๋ถ์ ์ด๋ฆ (์: ๊ฐ๋ฐํ)
O=Local : ์กฐ์ง ์ด๋ฆ (ํ์ฌ ์ด๋ฆ ๋ฑ)
L=Seoul : ๋์
ST=Seoul : ๋/์ฃผ ์ด๋ฆ
C=KR : ๊ตญ๊ฐ ์ฝ๋ (ํ๊ตญ = KR)
์ด ์ ๋ณด๋ ์ธ์ฆ์ ํ์ผ์ ๋ธ๋ผ์ฐ์ ์์ ๋ณผ ๋ ํ์๋ผ์.


๐ฆ ์คํํ๋ฉด ์ด๋ค ํ์ผ์ด ์๊ธฐ๋๋ฉด?
keystore.p12๋ผ๋ ์ด๋ฆ์ ํ์ผ์ด ์๊น๋๋ค.
์ด ํ์ผ์ด ๋ฐ๋ก HTTPS ์๋ฒ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ ๋ถ์ฆ!
Spring Boot์์๋ ์ด๊ฑธ application.yml์ ๋ฑ๋กํด์ ์ด๋ ๊ฒ ์จ์:
server:
ssl:
key-store: classpath:keystore.p12
key-store-password: 123456
๐ ์ฐธ๊ณ ๋ก ์ด keystore.p12๋ src/main/resources ํด๋์ ๋ฃ๋ ๊ฑธ ์ถ์ฒ๋๋ ค์!
๐ ์ด๊ฑด "์ง์ง ์ธ์ฆ์"์ธ๊ฐ์?
โ ์๋๋๋ค! ์ด๊ฑด self-signed, ์ฆ ๋ด๊ฐ ๋๋ฅผ ์ธ์ฆํ ์ธ์ฆ์์์.
๋ธ๋ผ์ฐ์ ์์ ๋ณด์ ๊ฒฝ๊ณ ๊ฐ ๋จ์ง๋ง, ๋ก์ปฌ ํ
์คํธ์ฉ์ผ๋ก ์ถฉ๋ถํ ์ธ ์ ์์ด์.
์ค์ ๋ฐฐํฌ ํ๊ฒฝ์์ Let's Encrypt ๊ฐ์ CA(์ธ์ฆ๊ธฐ๊ด)์์ ์ธ์ฆ์๋ฅผ ๋ฐ์์ผ ํฉ๋๋ค.
โจ ์ ๋ฆฌ!
keytool ๋ช
๋ น์ด๋ Spring Boot HTTPS ์ค์ ์ ์ํ ๋ก์ปฌ ์ธ์ฆ์ ํ์ผ์ ๋ง๋๋ ๋๊ตฌ
๋ง๋ ํ์ผ์ keystore.p12
์ค์ ํ ๋ application.yml์ classpath: ๊ฒฝ๋ก๋ก ๋ฑ๋ก
์ค์๋น์ค์์ ์ง์ง ์ธ์ฆ์๋ฅผ ์จ์ผ ํ์ง๋ง, ๊ฐ๋ฐ ํ
์คํธ์๋ self-signed๋ฉด ์ถฉ๋ถ!
๐งก ๋์์ด ๋์
จ๋์?
์ฒ์ ๋ณด๋ฉด ์ด๋ ค์ ๋ณด์ด์ง๋ง, ํ ๋ฒ ํด๋ณด๋ฉด ์ ๋ง ์ฌ์์!
์ด์ Spring Boot์์ HTTPS, HTTP/2.0๋ ๊ฑฑ์ ์๊ฒ ์ฃ ? ๐
๊ถ๊ธํ ์ ์ด๋ ๋งํ๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ๋ก ํธํ๊ฒ ์ง๋ฌธ ์ฃผ์ธ์!
#SpringBoot #HTTPS #HTTP2 #keytool #keystore #๋ฐฑ์๋๊ฐ๋ฐ #์๋ฐ์ธ์ฆ์ #๊ฐ๋ฐ์ํ
ํญ์ ํจ๊ป ๊ณต๋ถํ๋ ๊ฐ๋ฐ์ ๋ธ๋ก๊ทธ ๋๊ฒ ์ต๋๋ค ๐
Spring Boot) ๋ก์ปฌ์์ HTTP/2.0 ์ฐ๋ ๋ฐฉ๋ฒ
์๋ ํ์ธ์~ ๐์ค๋์ Spring Boot๋ก ๊ฐ๋ฐํ ๋ HTTP/2.0์ ๋ก์ปฌ์์๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํด์.์ฒ์์ ์ข ๋ฏ์ค ์๋ ์์ง๋ง, ํ ๋ฒ ํด๋ณด๋ฉด ์ ๋ง ์ฝ๊ณ ์ฌ๋ฐ์ต๋๋ค! ๐ HTTP/2.0์ด ๋ญ๊ธธ๋?HTTP
chuyj15.tistory.com