728x90
반응형
Apache, Tomcat에 PFS(Perfect Forward Secrecy)를 지원하도록 설정하는 방법
How to set up PFS (Perfect Forward Secrecy) support in Apache and Tomcat
PFS가 무엇인지?
PFS(Perfect Forward Secrecy)는 통신 과정에서 생성된 세션 키가 compromise되더라도 이전 통신 내용이 보호되는 암호화 통신 프로토콜의 특성을 말합니다. 즉, 이전에 사용된 키를 획득하여 현재 또는 이전의 통신 내용을 해독하는 공격자라도 새로운 통신에 사용되는 키를 획득하지 못하도록 보장합니다.
취약점
- PFS가 지원되지 않는다는 것은 서버와 클라이언트 간의 통신에서 새로운 세션 키를 생성하지 않고 이전에 사용한 세션 키를 계속 사용한다는 의미입니다. 이는 공격자가 한 번의 세션 키 유출로 이전 및 현재의 통신 내용을 모두 열람할 수 있는 기회를 제공하게 됩니다.
TLS 버전별 PFS 지원현황
- TLS 1.0: PFS를 지원하지 않음.
- TLS 1.1: PFS를 선택적으로 지원할 수 있지만 기본적으로는 지원하지 않음. (보안이슈있음)
- TLS 1.2: PFS를 기본적으로 지원.
- TLS 1.3: PFS를 기본적으로 지원.
TLS1.1 설정방법
아파치 웹 서버 (Apache)
- 아파치 웹 서버의 설정 파일을 엽니다. 일반적으로 httpd.conf 또는 apache2.conf에 해당합니다.
- 아래와 유사한 SSL 설정을 찾습니다:
SSLProtocol all -SSLv2 -SSLv3
- 해당 줄을 아래와 같이 수정하여 TLS 1.1을 활성화하고 PFS를 지원하도록 설정합니다:
SSLProtocol -all +TLSv1.1
SSLCipherSuite "EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA"
톰캣 서버 (Tomcat)
- 톰캣 서버의 server.xml 파일을 엽니다.
- <Connector> 요소에서 sslProtocol 및 ciphers 속성을 설정합니다. 아래와 유사한 설정을 찾을 수 있습니다:
<Connector port="443" protocol="HTTP/1.1"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/keystore.jks" type="RSA" />
</SSLHostConfig>
</Connector>
- 해당 설정을 아래와 같이 수정하여 TLS 1.1을 활성화하고 PFS를 지원하도록 설정합니다:
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/keystore.jks" type="RSA" />
<SSLProtocol>TLSv1.1</SSLProtocol>
<ciphers>EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA</ciphers>
</SSLHostConfig>
</Connector>
- 설정을 저장한 후 톰캣 서버를 재시작합니다.
TLS1.2 또는 TLS1.3에 PFS 설정방법
아파치 웹 서버 (Apache)
- 아파치 웹 서버의 설정 파일을 엽니다. 일반적으로 httpd.conf 또는 apache2.conf에 해당합니다.
- 아래와 유사한 SSL 설정을 찾습니다:
SSLProtocol all
- 해당 줄을 아래와 같이 수정하여 TLS 1.2 및 1.3을 활성화하고 PFS를 설정합니다:
- 참고) -는 비활성, +는 활성
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
- 설정을 저장한 후 아파치 웹 서버를 재시작합니다.
톰캣 서버 (Tomcat)
- 톰캣 서버의 server.xml 파일을 엽니다.
- <Connector> 요소에서 sslProtocol 및 ciphers 속성을 설정합니다. 아래와 유사한 설정을 찾을 수 있습니다:
<Connector port="443" protocol="HTTP/1.1"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/keystore.jks" type="RSA" />
</SSLHostConfig>
</Connector>
- 해당 설정을 아래와 같이 수정하여 TLS 1.2 및 1.3을 활성화하고 PFS를 지원하도록 설정합니다:
<!-- TLS 1.3 requires Java 11 or higher -->
<SSLHostConfig
ciphers="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305"
disableSessionTickets="true"
honorCipherOrder="false"
protocols="TLSv1.2, TLSv1.3">
- 설정을 저장한 후 톰캣 서버를 재시작합니다.
728x90
반응형