0단계 — 서버 확인 (모든 조치 공통)
① 서버 접속 — SSH 접속.
② 웹서버 타입·버전 확인
ps -ef | grep -E 'catalina|tomcat' | grep -v grep # 프로세스에서 CATALINA_HOME 경로도 보임
$CATALINA_HOME/bin/version.sh # 버전·JVM 확인
- 프로세스 인자의
-Dcatalina.home=값이 설치 경로다 - 앞단에 Nginx/Apache 프록시가 있으면 TLS 는 프록시에서 종단될 수 있다 —
server.xml에 8443/443 Connector 가 없으면 TLS 조치는 프록시 가이드를 따를 것
③ 설정 파일 — $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" />
- TLS 1.3 은 JDK 11 이상, JDK 8 은 8u261 부터 지원(Oracle 8u261 릴리스 노트의 JSSE TLS 1.3 백포트).
version.sh의 JVM Version 확인
보안 헤더
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>
- 7/8.0 은 Connector 당 keystore 1개(keystoreFile/keystorePass 속성) — 도메인별 분리는 포트 분리 필요
③ 확인 — 진단 툴.
최종 확인
진단 툴로 재검사 (캐시 최대 10분).