개발/ETC

Apache SSL 등급 올리기

신매력 2018. 1. 19. 21:00

사이트 등급 확인

 

https://www.ssllabs.com/ssltest/analyze.html 에 들어가서 등급 확인할 사이트의 주소로 확인해보자.

 

 

 

각 항목에 대해 어떤 기준으로 점수를 매기는지는 https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide 에서 확인 가능하다.

 

 

내 사이트의 경우 F 등급이 나왔다.ㅠㅠ

 

 

SSL 설정파일 수정하기

 

vi apps/apache/conf/extra/httpd-ssl.conf

(AS-IS)
  
SSLProtocol -all +TLSv1 +SSLv3
SSLCipherSuite SSLv3:+HIGH:+MEDIUM
  
(TO-BE)
  
SSLProtocol TLSv1.2 TLSv1.1 TLSv1
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305 : ECDHE-RSA-CHACHA20-POLY1305 : ECDHE-ECDSA-AES128-GCM-SHA256 : ECDHE-RSA-AES128-GCM-SHA256 : ECDHE-ECDSA-AES256-GCM-SHA384 : ECDHE- -AES256-GCM-SHA384 : DHE-RSA-AES128-GCM-SHA256 : DHE-RSA-AES256-GCM-SHA384 : ECDHE-ECDSA-AES128-SHA256 : ECDHE-RSA-AES128-SHA256 : ECDHE-ECDSA-AES128-SHA ECDHE-RSA-AES256-SHA : ECDHE-RSA-AES256-SHA384 : ECDHE-RSA-AES256-SHA384 : ECDHE-ECDSA-AES256-SHA : ECDHE-RSA-AES256-SHA : DHE-RSA-AES128-SHA256 : DHE DHA-RSA-AES256-SHA : DHE-RSA-AES256-SHA : ECDHE-ECDSA-DES-CBC3-SHA : ECDHE-RSA-DES-CBC3-SHA : EDH-RSA-DES-CBC3 -SHA : AES128-GCM-SHA256 : AES256-GCM-SHA384 : AES128-SHA256 : AES256-SHA256 : AES128-SHA : AES256-SHA : DES-CBC3-SHA :! DSS
SSLHonorCipherOrder on

 

 

문제 발생

SSLProtocol TLSv1.2 TLSv1.1 TLSv1 SSLv3
 

TLSv1.2 처럼 Dot이 있는 버전으로 등록이 불가한 현상 발생 (https로 접근이 불가)

원인은 오래된 아파치 버전에서 지원하지 않음 또는 openssl의 버전에서 지원하지 않기 때문으로 보임. (openssl 1.0.1j 버전부터 TLSv1.1, TLSv1.2를 안정적으로 사용할 수 있다고 한다)

 

그래서 일단 SSLProtocol은 기존 값으로 유지

SSLProtocol -all +TLSv1 +SSLv3
 

 

 

POODLE attack 없애기

 

SSLv3을 없앰

SSLProtocol -all +SSLv2
 

 

poodle 관련된 문구는 사라졌다.

 

 

이제 남은 것은, open ssl의 취약점 문제.

 

 

 

open ssl의 버전은

openSSL 1.0.1e​

 

구글링에 의하면 1.0.1 버전 중에서는 1.0.1t 이상이어야 취약점이 해결된다고 한다.

yum 명령어로 받을 수 있는 최종 버전은 1.0.1e이기 때문에,

1.0.1u 를 수동 install

 

 
/usr/local/ssl/bin/openssl

위 경로에 새로운 바이너리 파일로 교체함

 

아파치를 재시작 해보았더니

이 문구는 사라졌지만 여전히 F는 남아있었다..

 

 

Apache와 OpenSSL의 구조

 

 

 

삽질한 방법

 

mod_ssl.so가 가리키는 lib 파일만 높은 버전으로 변경하면 되지 않을까?

  • openssl의 새버전을 받아서 분리된 영역에 빌드하고 lib 파일 2개만 새 버전의 것을 참조하도록 변경

 

 

  • 결과 ===> 서버는 잘 동작했다. But, https://www.ssllabs.com 에서 
    • 인증서는 잘 가져오지만,
    • 등급을 측정하지 못하고 뭔가 에러가 뜸
  • 결국 원복

 

 

새로 시도해본 구조

 

Apache 2.2.21과 openssl 1.0.1e을 연동하여 생성된 mod_ssl.so로는 실패했다.
Apache 2.2.21과 openssl 1.0.1u을 연동하여 생성된 새로운 mod_ssl.so로 교체해본다.

step1

  • 기존 아파치는 예전 openssl과 연동하도록 복구
  • 같은 버전의 다른 apache와 높은 버전의 openssl과 연동함

 

 

step2

  • 기존 아파치가 참조하던 mod_ssl.so를 새로운 mod_ssl.so로 교체
  • 기존 openssl을 사용하던 sshd는 예전 openssl을 그대로 사용하기 때문에 영향이 없다.

 

 

 

  • 처음에 서버가 동작을 안했었는데, mod_ssl.so가 가리키는 곳이 설정되어 있지 않아서였고,
    심볼릭링크로 새 버전의 lib 파일들을 바라보도록 설정함
  • 만약 실패하는 최악의 상황의 경우 Apache를 교체를 하는 수 밖에 없음

 

 

 

 

결과

 

 

 

B등급 정도면 무난하므로 여기서 끝.