Tomcat HTTPS(SSL/TLS) 적용 가이드: JKS와 P12 설정 및 자동 리다이렉트
서론
웹 서비스의 보안(HTTPS)은 이제 선택이 아닌 필수입니다. Tomcat에서 SSL 인증서를 적용하는 방법은 인증서 형식(JKS, PKCS12 등)에 따라 설정 방식이 조금씩 다릅니다. 이번 포스팅에서는 인증서 적용부터 HTTP 요청을 HTTPS로 강제 전환하는 방법까지 정리합니다.
1. SSL 인증서 적용 (server.xml)
최신 Tomcat 버전에서는 .p12(PKCS12) 형식을 권장합니다. server.xml의 <Connector> 부분을 다음과 같이 설정합니다.
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/certificate.p12"
certificateKeystorePassword="your_password"
type="RSA" />
</SSLHostConfig>
</Connector>
2. HTTP to HTTPS 자동 리다이렉트
사용자가 http://로 접속해도 자동으로 https://로 전환되도록 설정해야 합니다.
web.xml 설정 추가
모든 요청에 대해 보안 연결을 강제하도록 WEB-INF/web.xml 하단에 다음 내용을 추가합니다.
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPS Only</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
server.xml 포트 매핑 확인
HTTP 커넥터 설정에 redirectPort="443"이 올바르게 지정되어 있는지 확인합니다.
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
핵심 SEO 포인트: 인증서 형식과 리다이렉트
- PKCS12 vs JKS: Java 9 이후부터는 산업 표준인 PKCS12(.p12) 형식을 기본으로 사용하므로 호환성이 더 높습니다.
- Port 443: 표준 HTTPS 포트인 443을 사용하면 URL 뒤에 포트 번호를 붙이지 않아도 됩니다.
- Strict-Transport-Security (HSTS): 보안 강화를 위해 브라우저 수준에서 HTTPS를 강제하는 헤더 설정을 함께 고려하는 것이 좋습니다.
결론
Tomcat에 HTTPS를 직접 적용하는 것은 생각보다 간단합니다. 하지만 실무에서는 Nginx와 같은 리버스 프록시에서 SSL을 처리(SSL Termination)하고 WAS와는 HTTP로 통신하는 구조를 더 많이 사용하므로, 자신의 인프라 환경에 맞는 방식을 선택하시기 바랍니다.