
Debian 11 서버에서 openssl 1.1.1n과 함께 nginx(1.21.6)를 실행하고 있습니다. 이 주제에 관해 많은 튜토리얼을 따르고 이 포럼에서 여러 질문을 살펴봤지만 TLS 1.3이 작동하지 않습니다. 출력 nginx -V
:
nginx version: nginx/1.21.6
built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
built with OpenSSL 1.1.1k 25 Mar 2021 (running with OpenSSL 1.1.1n 15 Mar 2022)
TLS SNI support enable
이전 버전에서도 TLS 1.3이 작동하지 않았기 때문에 nginx를 메인라인 버전으로 업그레이드했습니다. 매우 이상합니다... Openssl은 확실히 TLS 1.3을 지원합니다. 나는 openssl s_client -tls1_3 -connect www.cloudflare.com:443
그것을 통해 잘 작동하는지 테스트했습니다. 다음은 ssl.conf
각 nginx 서버에 포함된 nginx 파일입니다(인증서는 서버 섹션에 별도로 포함되어 있습니다).
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_stapling on;
#ssl_trusted_certificate /pfad/bundle.ca.pem;
ssl_stapling_verify on;
ssl_dhparam /etc/nginx/dhparams.pem;
ssl_ecdh_curve X448:secp521r1:secp384r1;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256: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;
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=31536000;preload;includeSubDomains" always;
그만큼내 사이트의 Qualys SSLtest그러나 내 서버에서 TLS 1.3을 사용한다는 사실은 표시되지 않습니다. 또한 Chrome 브라우저는 TLS 1.2를 통해 연결되는 것으로 표시됩니다. TLSv1.2
my 에서 지시문 을 제거 ssl.conf
하고만 남겨 두더라도 TLSv1.3
여전히 TLS 1.2를 통해 연결됩니다.
ssl_protocols
nginx의 다른 구성 파일에는 다른 지시문이 없습니다 . 를 통해 확인했습니다 nginx -T
.
정말 아이디어가 부족해요..... 누구든지 도와주실 수 있나요?
편집하다:ssl_protocols
어쨌든 nginx는 및 지시문 에 제대로 반응하지 않는 것 같습니다 ssl_ecdh_curve
. 예를 들어, 내 구성에서 를 삭제하면 ssl_ciphers
(@drookie가 그의 의견에서 제안한 대로) ssl_protocols TLSv1.3 TLSv1.2;
. 마찬가지로,Qualys SSL테스트는 지원되지만 (또는 ) secp256r1
구성에는 이 곡선이 없습니다 . 뭔가가 파일의 내 설정을 덮어쓰는 것 같습니다 . 인증서를 얻기 위해 acme.sh를 사용하고 있습니다. 으로 만 라인을 제공합니다 . 간섭/덮어쓰기의 원인이 무엇인지 모르겠습니다...ssl_ecdh_curve
prime256v1
ssl.conf
grep -R 'ssl_protocol' /etc/*
ssl.conf
ssl_protocols TLSv1.3 TLSv1.2;
답변1
많은 추가 테스트와 독서 끝에 마침내 해결책을 찾았습니다. nginx 구성 블록 http
이 아닌 블록 에 SSL 구성을 작성해야 했습니다 . 그러나 이것은 내 파일 server
의 지시문을 내 블록 에 명시적으로 복사한 경우에만 작동했습니다 (그렇지 않으면 출력ssl.conf
http
nginx.conf
nginx -t
nginx: [emerg] invalid number of arguments in "include" directive in /etc/nginx/nginx.conf:33
nginx: configuration file /etc/nginx/nginx.conf test failed
몇 가지 이유).
따라서 내 외모 http
블록은 nginx.conf
다음과 같습니다.
http {
...
ssl_dhparam /etc/nginx/dhparams.pem;
ssl_ecdh_curve X448:secp521r1:secp384r1;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
...
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
http
왜 이러한 SSL 설정을 각 블록이 아닌 블록 에 포함/붙여넣어야 하는지 모르겠습니다 server
..... 하지만 작동하고 TLS 1.3이 활성화되었습니다!