IT 성장일기

[Tomcat] TLS 버전 제한하기 본문

Server/Tomcat

[Tomcat] TLS 버전 제한하기

고 양 2023. 9. 11. 10:57
반응형
TLS 버전 제한하기

요즘 들어 부쩍 웹 취약점과 웹 보안 관련된 업무를 할 기회가 많아진 것 같습니다.
고객사에서 취약한 암호화 프로토콜인 TLS1 버전과 TLS1.1 버전의 사용을 제한하도록 설정해 달라는 요청이 와서
이 부분에 관해 새롭게 많은 것을 공부할 기회가 있었습니다.

빨간 박스 안에 있는거 안보이게 해주세요.

TLS가 뭐예요?

HTTP + TLS/SSL =  HTTPS
전송계층보안 (Transport Layer Security)의 약자로 웹 서버와 클라이언트 간의 보안 통신을 제공하는 프로토콜입니다.

 

기존 코드

<Connector port="8443" 
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" 
           SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/keystore.jks"
                     certificateKeystorePassword="password"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

Connector 태그 내부에 SSL관련 프로퍼티가 선언되어 있는 형식이었습니다.

 

Connector 태그는 톰캣을 사용하면서 수도 없이 접해봤었는데,
SSL과 관련된 8443 포트가 설정된 태그를 주의 깊게 본 것은 이번이 처음이었던 것 같습니다.

 

처음 시도한 코드

<Connector port="8443" 
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" 
           SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/keystore.jks"
                     certificateKeystorePassword="password"
                     type="RSA" />
        <SSLProtocol sslProtocol="TLSv1.2" /> <!-- 새로 추가 된 부분-->
    </SSLHostConfig>
</Connector>

SSLHostConfig 태그 내부에 SSLProtocol 버전을 제한해 주는 코드를 삽입했습니다.
서버가 정상적으로 작동하는 것은 확인했지만 고객사에서 검증을 거친 결과 반영되지는 않았었습니다.

 

1차 수정 후 코드

<Connector port="8443" 
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" 
           SSLEnabled="true"
           sslEnabledProtocol="TLSv1.2"> <!-- 새로 추가된 부분-->
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/keystore.jks"
                     certificateKeystorePassword="password"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

TLS 버전을 제한하는 속성을 Connector 태그 내에 선언했습니다. 하지만 이 코드는 서버의 동작 자체가 불가능했습니다.

 

정확한 원인은 잘 모르겠습니다만 keystorefile관련 값이 다른 태그에 선언되어 있어서 그런 것이 아닐까 추측되었습니다.
결국 구글과 각종 가이드에 가장 많이 등장하는 형식으로 바꿔보았습니다.

 

2차 수정 후 코드

<Connector port="8443" 
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" 
           SSLEnabled="true"
           sslEnabledProtocol="TLSv1.2"
           KeystoreFile="conf/keystore.p12"
           KeystorePass="password" />

SSLHostConfig 태그 내부의 키파일 경로와 키암호를 Connector 태그 내부에 삽입했습니다. 이번엔 서버가 제대로 작동했습니다.
실운영서버의 작동을 확인하고 검증을 요청한 결과 성공적으로 반영되었다는 답변도 받았습니다.

 

문제가 된 TLS1과 TLS1.1 버전은 현재 주로 사용되는 1.2 및 1.3 버전에 비해 많이 취약한 보안 수준을 제공하기 때문에
사용하지 않도록 하는 것이 바람직하다고 합니다.

하지만 늘 그렇듯 해당 어플리케이션의 환경과 조건에 맞게 설정하는 것이 좋겠습니다.

 

도움이 되어드렸다면 구독 / 좋아요 부탁드립니다.👏🏻

감사합니다.🙂

반응형