TL;DR
nginx 에서 SSL Labs 고득점을 받으려면 다음 항목을 중점적으로 설정해 주면 됩니다.
최신 TLS 만 지원
최신 버전의 TLS 인 TLS 1.2 와 TLS 1.3 만 지원하도록 설정합니다.
ssl_protocols TLSv1.2 TLSv1.3;
CODE
SSL ciphers 수정
견고한 알고리즘만 사용하도록 설정합니다. 아래 Ref 에 있는 ssl-config 의 nginx 설정 에는 ssl_prefer_server_ciphers 가 off 로 되어 있는데 이럴 경우 browser 가 낮은 강도의 암호화 suite 를 사용할 수 있으므로 on 으로 설정했습니다.
ssl_prefer_server_ciphers on;
ssl_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;
CODE
HSTS 기간을 충분하게 설정
HSTS(HTTP Strict-Transport-Security) 의 age 를 충분히 길게 (2년 정도) 잡으면 됩니다.
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
CODE
진행 과정
제 블로그인 lesstif.com 에서 사용하는 Let's encrypt 인증서 갱신이 필요해서 갱신후에 오랫만에 web server 의 SSL/TLS 구성의 적합성을 평가해 주는 사이트인 ssllabs 에 들어가 보았습니다.
처음에는 A 가 나왔는데 이유가 SSL Labs 가 취약하다고 평가하는 알고리즘인 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 와 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 를 사용했기 때문이었습니다.
그래서 위에 설명한 옵션으로 ciphers suite 를 조정하고 ssl_prefer_server_ciphers 를 off 로 설정하자 점수는 좀 더 올랐지만 여전히 A 였습니다.
마지막으로 HSTS 의 age 를 2년으로 설정해 주고 nginx 를 재시동하자 A+ 로 평가됐습니다.
제가 사용하는 nginx 의 ssl 설정은 아래를 참고하세요.
같이 보기
Ref