WEBBOOK CHAPTER

WAR 배포, 밤에 깨지 않게: 17장 Tomcat이 TLS를 직접 종료할 때 교체한다

17장 Tomcat이 TLS를 직접 종료할 때 교체한다

Tomcat 11은 JSSE 방식의 JKS·PKCS12 keystore와 PEM/OpenSSL 스타일 구성을 지원한다. 한 Connector에서 두 스타일의 속성을 섞지 않는다.

PKCS12를 만드는 예시는 다음과 같다. passphrase는 명령행 문자열 대신 권한이 제한된 파일이나 조직 비밀 도구로 전달한다.


openssl pkcs12 -export 
  -in next-cert.pem 
  -inkey next-key.pem 
  -certfile chain.pem 
  -name tomcat 
  -out next-tomcat.p12

keytool -list -v -keystore next-tomcat.p12 -storetype PKCS12

JSSE Connector의 핵심 형태는 다음과 같다. 비밀번호를 평문 server.xml에 고정하지 말고 Tomcat과 조직이 지원하는 비밀 주입 방식을 사용한다.


<Connector port="8443"
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           SSLEnabled="true" scheme="https" secure="true">
  <SSLHostConfig protocols="TLSv1.3,TLSv1.2">
    <Certificate
      certificateKeystoreFile="/etc/releaseportal/tls/current.p12"
      certificateKeystoreType="PKCS12"
      certificateKeyAlias="tomcat" />
  </SSLHostConfig>
</Connector>

Tomcat Manager text endpoint의 sslReload는 certificate와 key 파일을 다시 읽지만 server.xml 자체를 다시 parse하지 않는다. 파일 내용만 교체했다면 reload 후보가 될 수 있다. Connector 구조나 경로를 바꿨다면 재시작과 별도 변경 절차가 필요하다.


/manager/text/sslReload
/manager/text/sslReload?tlsHostName=portal.example.com

Manager 권한을 인터넷에 열지 않는다. 실행 뒤 sslConnectorCiphers, sslConnectorCerts 계열 진단과 외부 handshake를 확인한다. 지원 중인 정확한 endpoint와 역할은 사용 중인 Tomcat 버전 문서를 다시 본다.