Apache Tomcat에서 SSL을 구현하는 방법은 무엇입니까?

Tomcat 서버에 SSL/TLS 인증서를 설정하는 방법에 대한 상세 안내입니다.

Tomcat 서버 보안을 강화하는 데 있어 핵심적인 단계 중 하나는 SSL 인증서를 설정하여 웹 애플리케이션에 HTTPS를 통해 안전하게 접근할 수 있도록 하는 것입니다.

이를 위한 다양한 접근 방식이 존재합니다.

  • 로드 밸런서에서 SSL을 처리하는 방법
  • CDN 수준에서 SSL을 구현하는 방법
  • Apache나 Nginx와 같은 웹 서버를 프런트엔드로 사용하여 SSL을 적용하는 방법

그러나, 위와 같은 방법들을 사용하지 않거나, 프런트엔드 서버를 활용하지 않고 Tomcat에 직접 SSL을 적용해야 하는 경우에는 다음 정보가 유용할 것입니다.

본 글에서는 다음 항목들을 다룰 것입니다.

  • CSR(인증서 서명 요청) 생성 과정
  • 키 저장소 파일로부터 인증서를 가져오는 방법
  • Tomcat에서 SSL을 활성화하는 방법
  • TLS 프로토콜 설정
  • Tomcat이 443 포트에서 연결을 수신하도록 변경하는 방법
  • SSL 취약점에 대한 Tomcat 서버 테스트

그럼 시작해 보겠습니다.

SSL/TLS 인증서 준비

가장 먼저 해야 할 일은 CSR을 생성하고 공인된 인증 기관에서 서명을 받는 것입니다. 인증서 관리는 keytool 유틸리티를 활용합니다.

  • Tomcat 서버에 로그인합니다.
  • Tomcat 설치 디렉토리로 이동합니다.
  • ‘ssl’이라는 새 폴더를 생성합니다.
  • 다음 명령을 실행하여 키 저장소를 생성합니다.
keytool -genkey -alias domainname -keyalg RSA -keysize 2048 -keystore filename.jks

위 명령에서 변경할 수 있는 두 가지 변수가 있습니다.

  • 별칭: 나중에 쉽게 식별할 수 있도록 의미 있는 이름을 사용하는 것이 좋습니다. 도메인 이름으로 지정하는 것이 일반적입니다.
  • 파일 이름: 이 또한 도메인 이름으로 설정하는 것이 좋습니다.
  • 예시:

    [[email protected] ssl]# keytool -genkey -alias bloggerflare -keyalg RSA -keysize 2048 -keystore bloggerflare.jks
    Enter keystore password:
    Re-enter new password:
    What is your first and last name?
    [Unknown]: bloggerflare.com
    What is the name of your organizational unit?
    [Unknown]: Blogging
    What is the name of your organization?
    [Unknown]: Geek Flare
    What is the name of your City or Locality?
    [Unknown]:
    What is the name of your State or Province?
    [Unknown]:
    What is the two-letter country code for this unit?
    [Unknown]:
    Is CN=bloggerflare.com, OU=Blogging, O=Geek Flare, L=Unknown, ST=Unknown, C=Unknown correct?
    [no]: yes
    
    Enter key password for <bloggerflare>
    (RETURN if same as keystore password):
    
    [[email protected] ssl]#
    

    이름과 성을 묻는 질문에 유의해야 합니다. 이는 오해의 소지가 있을 수 있는데, 실제 이름이 아니라 보안 설정하려는 도메인 이름을 입력해야 합니다.

    모든 정보를 입력하면 현재 작업 디렉토리에 키 저장소 파일이 생성됩니다.

    다음으로, 아래 명령을 사용하여 새로 생성된 키 저장소로부터 새로운 CSR을 생성합니다.

    keytool -certreq -alias bloggerflare -keyalg RSA -file bloggerflare.csr -keystore bloggerflare.jks

    이 명령은 서명을 받기 위해 인증 기관에 제출해야 할 CSR 파일을 생성합니다. 테스트 환경이라면 무료 인증서 제공자를 이용할 수 있고, 실제 운영 환경에서는 프리미엄 인증서를 고려해야 합니다.

    인증서에 서명이 완료되었다면, 아래 명령들을 사용하여 키 저장소로 가져오는 과정을 진행합니다.

    • 인증 기관에서 제공하는 루트 인증서를 가져옵니다.
    keytool -importcert -alias root -file root -keystore bloggerflare.jks
    • 중간 인증서를 가져옵니다.
    keytool -importcert -alias intermediate -file intermediate -keystore bloggerflare.jks

    참고: 루트 및 중간 인증서를 가져오지 않으면 도메인 인증서를 키 저장소에 추가할 수 없습니다. 중간 인증서가 여러 개라면 모두 가져와야 합니다.

    • 도메인 인증서를 가져옵니다.
    keytool -importcert -file bloggerflare.cer -keystore bloggerflare.jks -alias bloggerflare

    인증서가 성공적으로 설치되었다는 메시지가 나타날 것입니다.

    인증서 응답이 키 저장소에 설치되었습니다.

    이제 인증서 키 저장소가 준비되었습니다. 다음 단계로 진행해 보겠습니다.

    SSL을 처음 접하거나 더 자세히 알고 싶다면 다음 온라인 강좌를 참고하십시오. SSL/TLS 운영.

    Tomcat에서 SSL 활성화

    Tomcat 서버에 로그인된 상태로 가정하고, ‘conf’ 폴더로 이동합니다.

    • server.xml 파일을 백업합니다.
    • `
    SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
    • 키 저장소 파일 이름과 비밀번호를 올바르게 수정해야 합니다.
    • Tomcat을 재시작하면 HTTPS를 통해 Tomcat에 접근할 수 있게 됩니다.

    성공입니다!

    표준 HTTPS 포트 설정

    왜 443 포트를 사용해야 할까요?

    위 스크린샷에서와 같이, https를 통해 8080 포트로 Tomcat에 접속하는 것은 몇 가지 이유로 표준적이지 않습니다.

    • 사용자에게 사용자 지정 포트를 사용하도록 요구하는 것은 바람직하지 않습니다.
    • 인증서가 포트 번호가 없는 도메인 이름으로 발급된 경우, 브라우저에서 경고를 표시할 수 있습니다.

    따라서 Tomcat이 443 포트에서 수신하도록 설정하여 포트 번호 없이 `https://`를 통해 접근할 수 있도록 하는 것이 좋습니다.

    이를 위해 선호하는 편집기로 server.xml 파일을 수정합니다.

    • `
    • 포트 번호를 8080에서 443으로 변경합니다.
    • 다음과 같이 표시되어야 합니다.
    <Connector port="443" protocol="HTTP/1.1"
    connectionTimeout="20000"
    SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
    redirectPort="8443" />
    • Tomcat을 재시작하고 포트 번호 없이 https로 애플리케이션에 접속해 봅니다.

    멋지군요, 성공입니다!

    SSL/TLS 취약점 테스트

    마지막으로, 서버가 온라인 위협에 취약하지 않은지 테스트를 수행해야 합니다.

    다양한 온라인 도구가 있으며, 여기에서는 SSL Labs를 사용해 보겠습니다.

    • SSL Labs 웹사이트에 접속하여 URL을 입력하고 테스트를 시작합니다.

    결과가 녹색이며 A 등급을 받았습니다.

    하지만 보고서를 자세히 살펴보고 취약점이 있는지 확인하고 수정하는 것이 좋습니다.

    오늘 준비한 내용은 여기까지입니다.

    이 글이 SSL/TLS 인증서를 사용하여 Tomcat을 안전하게 설정하는 데 도움이 되었기를 바랍니다. 더 많은 것을 배우고 싶다면, 다음 강좌를 추천합니다: 강의.