Search
🔒

HTTPS ssllab.com 등급 트러블 슈팅

SSL Server Test A등급으로 올리기

ssllabs.com를 통해 SSL Server Test를 한 결과 B등급이 나왔다. 해당 결과에 만족스럽지 못한 나는 Protocal Support에 문제가 있다는 것을 발견했다.
cerbot + let’s encrypt를 이용해 HTTPS 설정을 하게 될 경우 ssl 관련 설정들이 /etc/letsencrypt/options-ssl-nginx.conf에 저장된다.
해당 파일을 살펴보면 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 라고 적혀 있는걸 볼 수 있는데, 2020년부터 TLSv1.0 TLSv1.1에 대한 지원을 중단했다.
구 버전인 TLS 1.0, 1.1 은 POODLEBEAST 와 같은 여러 공격에 취약한 것으로 알려져 있다.
그 때문에 SSL Server Test에서 B등급이 나왔다는 것을 알 수 있었다. 단순히 TLSv1TLSv1.1을 삭제하는 것만으로도 A등급이 나오며 문제를 해결 할 수 있었다.
하지만 최신 버전인 TLSv1.3도 적용할려고 할 경우
nginx: [warn] invalid value "TLSv1.3" in /etc/letsencrypt/options-ssl-nginx.conf:10 nginx: configuration file /etc/nginx/nginx.conf test failed
Bash
복사
위와 같은 에러가 발생한다.

POODLE(Padding Oracle On Downgraded Legacy Encryption) 취약점

구식 암호화 기법을 악용할 수 있게 하는 프로토콜 다운그레이드 취약점.

BEAST(Browser Exploit Against SSL/TLS) 취약점

앤드 유저 브라우저에서 HTTPS 의 쿠키들을 해독하고 효과적인 타킷의 세션을 하이제킹할 수 있는 취약점.
주요 웹 브라우저 및 애플리케이션에 구현된 TLS 는 다운그레이드 협상 프로세스 (downgrade negotiation process)를 지원하기 때문에 서버가 최신 버전을 지원하더라도 공격자가 취약한 프로토콜을 이용할 수 있다.

TLSv1.3 적용하기

Ubuntu 16.04.7 LTS 버전을 사용하고 있기 때문에 단순히 apt-get으로 Nginx를 다운할 경우 nginx/1.10 버전을 다운하게 된다.
하지만 nginx/1.10 버전의 경우 TLSv1.3을 지원하지 않기 때문에 Nginx를 따로 업그레이드를 해줄 필요가 있다.
5 Minute Upgrade Nginx 1.10 to 1.15+ on Ubuntu 16.04 (Xenial) 해당 링크를 참고해 Nginx를 stable 버전인 nginx/1.16 으로 수동으로 업그레이드를 진행했다.
업그레이드 후 options-ssl-nginx.conf 파일의 ssl_protocolsTLSv1.3을 추가해주었다.
기존 openssl 1.0.2 버전에서는 TLSv1.3을 지원하지 않기 때문에 openssl 또한 1.1.1 버전으로 수동으로 업그레이드를 진행했다. (How to Install OpenSSL from source code on Ubuntu 16.04)
업그레이드 후에 정상적으로 TLSv1.3을 지원하는 것을 확인 할 수 있다.

HSTS 설정

client의 browser에게 http로 어떠한 것도 load 하지 말라고 규제합니다.
이를 통해 http에서 https로 redirect 되는 request를 minimize 할 수 있습니다.
add_header Strict-Transport-Security "max-age=31536000" always;
HSTS 설정 후에 A+ 등급이 나오는 것을 확인 할 수 있다.