← 가이드

Tomcat 보안 조치 가이드

Tomcat 에서 TLS 프로토콜 제한, 보안 헤더 필터, HTTPS 리다이렉트를 적용하는 단계별 절차

0단계 — 서버 확인 (모든 조치 공통)

① 서버 접속 — SSH 접속.

② 웹서버 타입·버전 확인

ps -ef | grep -E 'catalina|tomcat' | grep -v grep    # 프로세스에서 CATALINA_HOME 경로도 보임
$CATALINA_HOME/bin/version.sh                         # 버전·JVM 확인

③ 설정 파일 — $CATALINA_HOME/conf/server.xml (TLS), conf/web.xml (헤더 필터)

④ 인증서 경로 — server.xml 의 SSLHostConfig > Certificate 또는 구식 Connector 의 keystoreFile 속성.


TLS 1.0/1.1 비활성 + TLS 1.3 활성

Tomcat 8.5 / 9 / 10 이상 (SSLHostConfig 방식):

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           SSLEnabled="true">
    <SSLHostConfig protocols="TLSv1.2+TLSv1.3">
        <Certificate certificateKeystoreFile="conf/keystore.jks" ... />
    </SSLHostConfig>
</Connector>

Tomcat 7 / 8.0 (구식 Connector 속성):

<Connector port="8443" ... sslEnabledProtocols="TLSv1.2" />

보안 헤더

conf/web.xml 에 Tomcat 내장 HttpHeaderSecurityFilter 가 주석 상태로 포함되어 있다(기본 블록은 filter 선언만 있음 — 저장소 원문 확인). 주석을 해제하고 아래처럼 init-param 과 filter-mapping 을 추가한다:

<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <init-param><param-name>hstsEnabled</param-name><param-value>true</param-value></init-param>
    <init-param><param-name>hstsMaxAgeSeconds</param-name><param-value>31536000</param-value></init-param>
    <init-param><param-name>antiClickJackingEnabled</param-name><param-value>true</param-value></init-param>
    <init-param><param-name>blockContentTypeSniffingEnabled</param-name><param-value>true</param-value></init-param>
    <filter-mapping>
        <filter-name>httpHeaderSecurity</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</filter>

CSP·Referrer-Policy 는 이 필터에 없다 — 애플리케이션 필터로 추가하거나 앞단 프록시에서 얹는 것이 간단하다.

HTTP → HTTPS 리다이렉트

conf/web.xml 마지막에:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>all</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 의 80(8080) Connector 에 redirectPort="443" 이 설정돼 있어야 실제 이동한다.

인증서 교체 (약한 키·서명)

keystore(JKS/PKCS12) 재생성 후 교체 — 만료일 확인 습관은 1편 참조.

신규 도메인 인증서 설치

발급·파일 준비는 발급 공통 가이드 먼저. Tomcat 은 keystore 로 변환이 필요하다.

① PKCS12 keystore 생성:

openssl pkcs12 -export -out 새도메인.p12 \
  -inkey privkey.pem -in fullchain.pem -name 새도메인

② server.xml 에 커넥터/호스트 추가 — 8.5+ 는 SNI 로 도메인별 인증서 가능:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true">
    <SSLHostConfig hostName="새도메인" protocols="TLSv1.2+TLSv1.3">
        <Certificate certificateKeystoreFile="conf/새도메인.p12"
                     certificateKeystorePassword="비밀번호" type="RSA" />
    </SSLHostConfig>
</Connector>

③ 확인 — 진단 툴.

최종 확인

진단 툴로 재검사 (캐시 최대 10분).

참조 문서 (공식)