이번 포스팅에서는 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 설정
- 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,..."/>
- 80번 포트를 443번 포트로 리다이렉트
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443"/>
- 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 메소드의 비활성화는 두 가지 설정을 통해 가능합니다 (둘 다 했을 때 적용 됨)
- server.xml의 Connector 설정에서 allowTrace 속성을 추가
<Connector port="80" protocol="HTTP/1.1" allowTrace="false" />
- 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 제한은 웹 서버 보안을 강화하는 중요한 단계입니다.
실무에서 발생한 문제를 해결한 과정을 공유했으니, 여러분도 비슷한 문제를 겪고 있다면 적용해 보세요.
궁금한 점이나 추가로 공유하고 싶은 경험이 있다면 댓글로 남겨주세요. 😊
'Server > WAS' 카테고리의 다른 글
WAS - 하나의 Tomcat으로 여러 서비스 운영하는 방법 (0) | 2024.11.02 |
---|---|
Tomcat8 - JSESSIONID 세션 충돌 문제와 해결 방법 (2) | 2024.09.28 |
Tomcat8 - 세션 클러스터링(Session Clustering) 가이드 (0) | 2024.09.05 |
JBoss - 기본 인코딩 설정 (UTF-8) (0) | 2023.07.13 |
Linux - Tomcat7 설치 (0) | 2023.02.14 |