Spring framework ๊ทธ๋ฆฌ๊ณ Tomcat์ ํตํด์ ์น ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ์๋ค๋ ์ ์ ํ์ ํฌ์คํ ์ ์งํํ๊ฒ ์ต๋๋ค.
์ค๋งํธํฐ์ด ๋ณด๊ธ๋๊ณ ์ธํฐ๋ท์ด ํ๋ฐํด์ง๊ณ ์น ๋ํ ์ฌ์ฉ์๊ฐ ๋ง์ด ๋์ด๋๋ฉด์ ์น ๋ณด์์ ๋ํด ์ค์์ํ๊ฒ ๋์๋๋ฐ์. ์ด ๋๋ฌธ์ ์์ฆ ์น ์ฌ์ดํธ์์ SSL ์ธ์ฆ์๊ฐ ๋ถ์ง ์์ ์ฌ์ดํธ๋ ์ต์ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ํ์ ๋ ๋ฌด์ญ๊ฒ ๊ฒฝ๊ณ ๋ฅผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ์น์๋ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด์ ์น ์๋ฒ์ชฝ์ ์ธ์ฆ์๊ฐ ๋ถ์ด์๋ ๊ฒฝ์ฐ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ข ๋ ์์ ํ๋ค๊ณ ํ ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ ์ธ์ฆ์๋ฅผ ๋ถ์ด๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ ๋ฆฌํ์ง ์๊ณ ์ธ์ฆ์๋ฅผ ๋ถ์ธ ํ์ ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)๊ฐ http ์ฃผ์๋ก ์ ์ํ์ ๋ ์๋์ผ๋ก https๋ก ์ ์๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
์ฐธ๊ณ ๋ก ์ ๋๋ก ์ธ์ฆ๋์ง ์์ ์ธ์ฆ์๋ฅผ ๋ถ์ธ ๊ฒฝ์ฐ ์๋ฅผ ๋ค์ด, ์์ฒด์ ์ผ๋ก ์์ฐํ ์ธ์ฆ์๋ฅผ ์๋ฒ์ ์ ์ฉํ๋ฉด ์์ ์ด๋ฏธ์ง์ ๊ฐ์ด ๋ธ๋ผ์ฐ์ ์์ URI๊ฐ ์ถ๋ ฅ๋๋ ๋ถ๋ถ์ ์ฃผ์๊ฐ ํ์ํ๋ค๊ณ ํ์๊ฐ ๋ฉ๋๋ค.
์๋ฒํ๊ฒฝ
Tomcat 9.0.52
Spring framework 4.3.20.RELEASE
์์
1. Tomcat server.xml ์ธ์ฆ์ ์ ์ฉ
2. web.xml ์๋ ๋ฆฌ๋ค์ด๋ ํธ ์ค์
1. Tomcat server.xml ์ธ์ฆ์ ์ ์ฉ
์ฐ์ tomcat ์๋ฒ์ conf ๋๋ ํ ๋ฆฌ ์์น์ ์ ์ฉํ ์ธ์ฆ์ ํ์ผ์ ์ ๋ก๋ ํด์ค๋๋ค. ์ฌ๊ธฐ์๋ jksํ์ผ์ ์ฌ์ฉํ์์ต๋๋ค.
์ธ์ฆ์ ํ์ผ ์ ๋ก๋
drwx------ 3 apptm apptm 4096 10์ 28 19:03 ./
drwxrwxr-x 10 apptm apptm 4096 9์ 1 10:07 ../
drwxr-x--- 6 apptm apptm 4096 8์ 25 16:46 Catalina/
-rw-rw-r-- 1 apptm apptm 6917 8์ 25 17:01 ์ธ์ฆ์.jks
-rw------- 1 apptm apptm 13052 7์ 31 13:12 catalina.policy
-rw------- 1 apptm apptm 7262 7์ 31 13:12 catalina.properties
-rw------- 1 apptm apptm 1400 7์ 31 13:12 context.xml
-rw------- 1 apptm apptm 1149 7์ 31 13:12 jaspic-providers.xml
-rw------- 1 apptm apptm 2313 7์ 31 13:12 jaspic-providers.xsd
-rw------- 1 apptm apptm 4144 7์ 31 13:12 logging.properties
-rw------- 1 apptm apptm 9806 10์ 27 14:36 server.xml
-rw------- 1 apptm apptm 2756 7์ 31 13:12 tomcat-users.xml
-rw------- 1 apptm apptm 2558 7์ 31 13:12 tomcat-users.xsd
-rw------- 1 apptm apptm 172359 7์ 31 13:12 web.xml
์ธ์ฆ์ ์ด๋ฆ์ ์ด๋ค ์ด๋ฆ์ด์ด๋ ์๊ด์์ต๋๋ค. ์ฌ์ค ์ธ์ฆ์ ์์น๋ ์๊ด์์ต๋๋ค. server.xml์ ์ค์ ์ ์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ค๋ช ์ ์ํด์ ํ์ผ์ด๋ฆ์ ์ธ์ฆ์.jks๋ก ์ ๋ก๋ ํ์ต๋๋ค.
server.xml ์์
์ค์น๋ ํฐ์บฃ ๋ฒ์ ์๋ SSL ์ค์ ํ๋ ๋ถ๋ถ์ด ์์๋ก ๋ค์ด์๊ณ ์ฃผ์์ฒ๋ฆฌ๊ฐ ๋์ด ์์ต๋๋ค. ์ฃผ์์ ํด์ ํ๊ณ ์๋ง๊ฒ ์์ ํด์ค๋๋ค.
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443"/>
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443
This connector uses the NIO implementation. The default
SSLImplementation will depend on the presence of the APR/native
library and the useOpenSSL attribute of the
AprLifecycleListener.
Either JSSE or OpenSSL style configuration may be used regardless of
the SSLImplementation selected. JSSE style configuration is used below.
-->
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150"
SSLEnabled="true"
defaultSSLHostConfigName="๊ธฐ๋ณธํธ์คํธ๋ช
">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig hostName="ํธ์คํธ๋ช
">
<Certificate certificateKeystoreFile="conf/์ธ์ฆ์.jks"
certificateKeystorePassword="์ธ์ฆ์๋น๋ฐ๋ฒํธ"
type="RSA" />
</SSLHostConfig>
</Connector>
์ธ์ฆ์๋ฅผ ์์ฑํ ๋ ์ ๋ ฅํ ํธ์คํธ๋ช ๊ณผ ๋น๋ฐ๋ฒํธ ๊ทธ๋ฆฌ๊ณ ์ธ์ฆ์ ํ์ผ์ ์์น๋ฅผ ์๋ง์ ์์น์ ๋ฃ์ด์ค๋๋ค.
๊ทธ๋ฌ๋ฉด ์ธ์ฆ์ ์ ์ฉ์ด ๋๋ฉ๋๋ค! ๋ง์ฝ 443ํฌํธ ๋๋ 8443ํฌํธ(์ง์ ํํฌํธ)๋ก ์น์๋ฒ์ ์ ์์ด ์๋๋ค๋ฉด ๋ฐฉํ๋ฒฝ ๋๋ iptable ์ค์ ๋ฑ ๋คํธ์ํฌ ์ค์ ์ ํ์ธํด๋ณด์๊ธธ ๋ฐ๋๋๋ค.
2. web.xml ์ค์
Tomcat๋ง ์ค์ ํ๊ณ ๋ง๋ฌด๋ฆฌํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ์๊ฐ https ๊ฐ ์๋ http ํ๋กํ ์ฝ๋ก ์ ๊ทผํ๊ฒ ๋๋ฉด ์ธ์ฆ์๊ฐ ์ ์ฉ๋์ง ์์์ฒด ์ฌ์ดํธ์ ์ ๊ทผ์ด ๋ฉ๋๋ค. ์ด๋ฐ ํ์์ ๋ฐฉ์งํ๊ธฐ ์ํด์ http ์ ์ ์ ์๋์ผ๋ก https๋ก ๋ฆฌ๋ค์ด๋ ํธ ํด์ฃผ๋๋ก web.xml์ ์์ ํด์ค๋๋ค.
...
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPS or HTTP</web-resource-name>
<url-pattern>/web/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL Forward</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
์์ ์ค์ ์ web-app ํ๊ทธ ์์ ๋งจ ์๋์ ๋ฃ์ด์ค๋๋ค.
์ด๋ ๊ฒ Tomcat, Spring framework ๊ธฐ๋ฐ ์น ์๋ฒ SSL ์ธ์ฆ์ ์ ์ฉ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
๋ถ์กฑํ ๊ธ ์ฐพ์์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์๋ชป๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ์ง์ ํด์ฃผ์๊ณ ์ด๋ค ํผ๋๋ฐฑ๋ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.