본문 바로가기

Server/WAS

WAS - Tomcat SSL 적용 및 HTTP Methods 제한 방법

728x90

이번 포스팅에서는 Tomcat 서버에 SSL을 적용하고, HTTP Methods를 제한하여 보안을 강화하는 방법을 소개합니다.

최근 서버 설정 중 발생한 문제 해결 과정도 함께 다뤄볼 예정이니, 관련 작업을 진행 중이신 분들에게 도움이 되었으면 합니다.


1. Tomcat SSL 적용 방법

SSL은 서버와 클라이언트 간 데이터를 암호화하여 안전한 통신을 가능하게 합니다. 

1-1. 준비물

  • 도메인이름.crt: 인증서 파일
  • 도메인이름.ca-bundle: 체인 인증서 파일
  • private.key: CSR 생성 시 발행한 개인 키

1-2. 인증서 파일 통합

먼저 . crt와. ca-bundle을 하나의 .pem 파일로 통합합니다

cat 도메인이름.crt 도메인이름.ca-bundle > 도메인이름.pem

1-3. PEM to PFX 변환

.pem과 private.key를 .pfx 형식으로 변환

openssl pkcs12 -export -name 도메인이름 -in 도메인이름.pem -inkey private.key -out 도메인이름.pfx
  • 변환 과정에서 패스워드를 입력합니다.

1-4. PFX to JKS 변환

Tomcat에서 사용하는 .jks 형식으로 변환

keytool -importkeystore -srckeystore 도메인이름.pfx -srcstoretype pkcs12 -destkeystore 도메인이름.jks -deststoretype jks
  • PFX 생성 시 입력했던 패스워드와 JKS 생성 패스워드를 입력합니다.

1-5. Tomcat SSL 설정

  1. server.xml에 SSL 키 저장소를 등록합니다
    <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" keystoreFile="{keystore 경로}/{파일명}.jks"
               keystorePass="{패스워드}" sslEnabledProtocols="TLSv1.2"
               ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,..."/>
  2. 80번 포트를 443번 포트로 리다이렉트
    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000" redirectPort="443"/>
  3.  HTTP를 HTTPS로 리다이렉트 하도록 web.xml에 설정 추가 (중요)
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>SSL Forward</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

2. HTTP Methods 제한

서버 보안을 강화하기 위해 사용하지 않는 HTTP 메소드를 제한하는 방법을 알아봅니다.

특히 TRACE 메소드로 인해 발생할 수 있는 민감 정보 노출 문제를 해결합니다.

2-1. HTTP Methods 제한 설정

web.xml 파일에 아래 내용을 추가합니다

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Restricted methods</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>TRACE</http-method>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>
  • 이 설정은 PUT, DELETE, OPTIONS, TRACE 메소드의 접근을 차단합니다.

2-2. TRACE 메소드 문제 해결

TRACE 메소드의 비활성화는 두 가지 설정을 통해 가능합니다 (둘 다 했을 때 적용 됨)

  1. server.xml의 Connector 설정에서 allowTrace 속성을 추가
    <Connector port="80" protocol="HTTP/1.1" allowTrace="false" />
  2. web.xml에서 TRACE 메소드를 제한 (2-1 HTTP Methods 제한 설정 참고)

2-3. TRACE 메소드 점검

아래 명령어를 통해 서버에서 허용하는 HTTP 메소드를 확인합니다

curl -v -X TRACE http://{도메인 또는 IP}
 
 

허용된 메소드는 ALLOW 헤더에 표시되며, 설정이 제대로 적용되었는지 확인합니다.


3. 주요 문제 및 해결

3-1. TRACE 메소드 허용 문제

기본적으로 Tomcat은 TRACE 메소드를 허용합니다. 따라서 allowTrace="false"를 명시적으로 설정해야 합니다.

3-2. 커스텀 에러 페이지와 TRACE

TRACE 제한이 제대로 적용되지 않는 경우가 있는데, 이는 커스텀 에러 페이지로 인해 발생할 수 있습니다. 이 경우, 커스텀 에러 페이지 대신 JSP 파일을 직접 참조하도록 수정하거나 TRACE 요청에 대해 302 리다이렉트를 검토합니다.


4. 마무리

SSL 적용과 HTTP Methods 제한은 웹 서버 보안을 강화하는 중요한 단계입니다.

실무에서 발생한 문제를 해결한 과정을 공유했으니, 여러분도 비슷한 문제를 겪고 있다면 적용해 보세요.

 

궁금한 점이나 추가로 공유하고 싶은 경험이 있다면 댓글로 남겨주세요. 😊

 

728x90
반응형