[SSL] Tomcat에 SSL 적용하기
⏰ 2021-08-20 (금) 00:35:21
개요
SSL 인증서를 받았으니, 이를 적용해보자. 보통 Nginx 같은 웹서버나, Tomcat과 같은 WAS에 적용한다.
이 장에서는 Tomcat 9.0.50을 기준으로 설명한다.
Tomcat에 인증서 적용하기
Tomcat에 인증서를 적용한다. Tomcat Native가 설치되어있는지, 없는지에 따라 방법이 다르다.
Tomcat Native가 적용되어 있다면 pem
파일을 바로 적용할 수 있으며, 아니라면 pem
을 jks
와 같은 호환 가능한 확장자로 적절히 변경해야한다.
Tomcat Native 설치방법
OS에 따라 Tomcat Native를 설치하는 방법이 다르다. Tomcat Native를 설치하지 않고도 SSL을 적용할 수 있으니, 관심이 없다면 이 단계를 패스해도 무방하다.
Windows 10
🔗 이 링크에서 Tomcat Native 라이브러리를 다운로드 받는다. 중간에 [Native 1.2.30 Windows Binaries.zip]을 다운로드 받으면 된다.
압축 풀면 [bin] 폴더에 tcnative-1.dll
파일이 있을텐데, 해당 DLL을 TOMCAT_HOME_HOME/bin
에 옮기는 것으로 설치가 끝난다.
Linux(CentOS 7 이상)
BASH
1
yum -y install tomcat-native
CentOS 7을 기준으로 위 명령어를 입력하면 된다. 만약 위와 같은 명령어를 사용할 수 없다면 직접 🔗 이 링크에서 컴파일해서 적용해야한다.
Linux(컴파일)
직접 소스를 컴파일해서 사용한다. CentOS를 기준으로 설명한다.
BASH
1
yum install apr-devel openssl-devel
혹은 Devian 계열일 경우
BASH
1
apt-get install libapr1.0-dev libssl-dev
컴파일 이전에 위 도구들이 설치되어있어야 한다.
🔗 이 링크에서 [Native 1.2.30 Source Release tar.gz]를 다운로드 받아 압축을 푼다.
BASH
1
tar -zxvf Native 1.2.30 Source Release tar.gz
압축은 위 명령어로 해제하면 되며, OS에 따라 명령어가 다를 수 있다.
BASH
1 2 3 4
cd ${압축 해제 경로} ./configure --with-apr=/usr --prefix=${현재경로} --with-java-home=${JAVA_HOME} make make install
위 명령어를 순차적으로 입력해주면 된다.
SSL 인증서 적용하기
SSL 인증서를 적용하자. Tomcat Native 적용 여부에 따라 방법이 다르다.
Tomcat Native로 PEM 파일 적용하기
TOMCAT_HOME/conf/server.xml
파일을 열어보자.
XML
1 2 3 4 5 6 7 8
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="443" scheme="https" secure="true" SSLEnabled="true" SSLCertificateFile="example.com-crt.pem" SSLCertificateKeyFile="example.com-key.pem" sslProtocol="TLS" />
위와 같이 수정해주면 된다. SSLCertificateFile
에 crt.pem
파일을, SSLCertificateKeyFile
에 key.pem
파일 경로를 지정한다.
일반 Tomcat에 PEM to JKS로 변환하여 적용하기
어떠한 이유로든 Tomcat Native를 설치하지 못 할 경우, 일반 Tomcat은 PEM 파일을 인식할 수가 없다. 따라서 Tomcat이 지원하는 포맷으로 변환하여 사용해야한다. 이 문서에선 .jks
파일으로 변환하여 적용한다.
준비물은 아래와 같다.
- OpenSSL
- keytool (JAVA 깔면 있음)
🔗 OpenSSL은 직접 설치해야하고, keytool은 JAVA_HOME/bin
에 있으므로 JAVA가 있다면 따로 설치하지 않아도 된다.
BATCH
1 2 3 4 5
# pem to p12 openssl pkcs12 -export -out {name}.p12 -in {crt}.pem -inkey {key}.pem # p12 to jks keytool -importkeystore -srckeystore {name}.p12 -srcstoretype pkcs12 -destkeystore {name}.jks -deststoretype jks
위 명령어를 순서대로 입력하면 된다. 변환 과정에서 인증서에 저장할 비밀번호를 요구한다. 추후 웹서버에 해당 비밀번호를 제공해야하니, 잘 기억해두자.
4개였던 .pem
파일과 달리 .jks
는 심플하게 하나만 생성된다. 생성이 완료되면 TOMCAT_HOME/conf/server.xml
파일을 열어보자.
XML
1 2 3 4 5 6 7 8
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="443" scheme="https" secure="true" SSLEnabled="true" keystoreFile="example.com.jks" keystorePass="비밀번호" sslProtocol="TLS" />
keystoreFile
에 생성한 .jks
파일을, keystorePass
에 변환 과정에서 입력한 비밀번호를 입력한다.
확인
본 문서에선 SSL 포트를 443
으로 설정했다. SSL의 기본 포트는 443이므로, 별도의 포트 표시를 하지 않아도 자동으로 연결될 것이다.
이제 톰캣을 기동하여, 도메인에 접속해보자. 인증서 정보가 확인되면 성공이다.
참고로, 인증서는 도메인을 기준으로 동작한다. 만약 localhost
내지는 127.0.0.1
, IP를 입력하여 들어오면 인증서 오류가 뜨니 참고할 것.
정리
이로써 SSL 적용이 완료됐다. 처음엔 뭔가 복잡해보여도, 한 번 해두면 크게 어려운 부분은 없다.
Let's Encrypt는 DV 인증서를 무료로 받을 수 있는 가장 쉽고 빠른 방법이므로, SSL이 필요하다면 적극적으로 활용해보자.
🏷️ 태그
읽어주셔서 고마워요!
도움이 되셨다면, 공감이나 댓글을 달아주시는 건 어떤가요?
블로그 운영에 큰 힘이 됩니다.