J'essaie d'activer TLS 1.3 sur mon serveur. J'ai suivi une abondance d'articles sur Google et j'ai les mêmes paramètres de configuration dans ma propre configuration, mais je ne peux pas dépasser TLS 1.2.
Je suis sur Ubuntu 16.
J'utilise la version NGINX 1.14 qui est construit avec OpenSSL 1.1.1.
ssl_protocols TLSv1.3 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_ecdh_curve X25519:secp256k1:secp384r1:prime256v1; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES25 ssl_session_timeout 10m; ssl_session_cache shared:SSL:10m; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 216.146.35.35 216.146.36.36 valid=60s; resolver_timeout 2s;
Ce sont toutes les versions requises du logiciel que j'ai vu qui sont nécessaires pour prendre en charge TLS 1.3.
J'utilise Chrome 72 et SSL Labs lors du test du certificat, mais il dit toujours que c'est sur 1.2.
Voici la partie de mon fichier de configuration NGINX qui est liée aux options SSL
â nginx -V nginx version: nginx/1.14.2 built with OpenSSL 1.1.1 11 Sep 2018 (running with OpenSSL 1.1.1a 20 Nov 2018) TLS SNI support enabled
J'ai obtenu les chiffrements de https://cipherli.st . p >
Avec ces options de configuration, je ne peux pas dépasser le protocole TLS 1.2.
Je pense que c'est tout ce à quoi je peux penser qui pourrait me causer des problèmes, mais je peux vous dire tout ce que vous peut avoir besoin de savoir pour aider mon cas.
Merci,
Chris
5 Réponses :
Vos ssl_protocols
doivent être classés comme TLSv1.2 TLSv1.3
.
Ensuite, vos ssl_ciphers
doivent inclure la liste des TLSv1.3 chiffrements en premier (dans cet ordre):
Your User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36 Your client supports the following ciphers: 0x2a2a:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_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:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:0x000a The negotiated cipher with this server is: TLS_AES_256_GCM_SHA384
suivi de vos chiffrements TLSv1.2. Voici à quoi ressemble tls13.iachieved.it nginx.conf
:
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; ssl_prefer_server_ciphers on;
Et vous y connecter avec Chrome 72:
Et la réponse du site:
TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 TLS_AES_128_CCM_8_SHA256 TLS_AES_128_CCM_SHA256
Notez que le votre client prend en charge les chiffrements suivants
est ce que votre navigateur Web prend en charge, pas le serveur.
p>
Hmmm, ça ne fonctionnait toujours pas. J'ai ajouté les chiffres que vous avez mentionnés ci-dessus. Vouliez-vous que je fasse ça? J'ai vérifié le site mentionné - dois-je ajouter ces chiffrements à la place?
Oui, vous devez ajouter les ssl_ciphers
répertoriés dans le bloc nginx.conf
ci-dessus, et mettre TLSv1.3
en dernier dans vos ssl_protocols
.
J'apprécie votre aide Joe, mais même avec les suggestions de mention ci-dessus, il s'affiche toujours en tant que TLS 1.2.
C'est l'un de ces cas où le manque de messagerie privée sur SO gêne les choses, mais ce n'est pas grave. Ma suggestion à ce stade serait de simplifier votre configuration NGINX, de supprimer votre dhparam, vos courbes ecdh, l'agrafage OSCP, etc. et d'obtenir juste le strict minimum. Il existe un modèle pour nginx.conf sur github.com/iachievedit/tls13_nginx_cosmic si vous pouvez regarder cela (ignorez les bits LUA). Je suis sûr qu'il se passe quelque chose de subtil.
Quiconque voit cela devrait être sûr de vérifier / ajuster le protocole et la liste de chiffrement dans leur bloc de serveur par défaut dans nginx.conf également.
L'activation de TLSv1.3 sur Nginx peut sembler assez simple, mais n'est pas documentée comme il se doit. Aller droit au but maintenant. L'astuce consiste à inclure les paramètres SSL dans chaque bloc serveur de votre configuration. Ne pas le faire, entraînera le fait d'un TLSv1.3 désactivé. Cela a du sens dans la mesure où le protocole tls n'est pas "mis à jour" à la première requête qui atteint le serveur:
sudo vi ssl_config
server { server_name xxx.xxx.xxx.xxx; #Your current server ip address. It will redirect to the domain name. listen 80; listen 443 ssl http2; include ssl_config; return 301 https://example.com$request_uri; } server { server_name www.example.com; listen 80; listen 443 ssl http2; listen [::]:80; listen [::]:443 ssl http2; include ssl_config; # Non-www redirect return 301 https://example.com$request_uri; } server { server_name example.com; listen 443 ssl http2; listen [::]:443 ssl http2; root /var/www/html; charset UTF-8; include ssl_config; location ~* \.(jpg|jpe?g|gif|png|ico|cur|gz|svgz|mp4|ogg|ogv|webm|htc|css|js|otf|eot|svg|ttf|woff|woff2)(\?ver=[0-9.]+)?$ { expires max; add_header Access-Control-Allow-Origin '*'; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; access_log off; } #access_log logs/host.access.log main; location ~ /.well-known/acme-challenge { allow all; root /var/www/html; default_type "text/plain"; } location / { index index.php; try_files $uri $uri/ /index.php?$args; #limit_conn num_conn 15; #limit_req zone=num_reqs; } error_page 404 /404.php; #pass the PHP scripts to FastCGI server listening on php-fpm unix socket location ~ \.php$ { try_files $uri =404; fastcgi_index index.php; fastcgi_pass php:9000; #for docker. #fastcgi_pass unix:/var/run/php7-fpm.sock; #for non-docker. fastcgi_pass_request_headers on; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_request_buffering on; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; include fastcgi_params; } location = /robots.txt { access_log off; log_not_found off; } location ~ /\. { deny all; access_log off; log_not_found off; } }
Et:
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload'; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header Referrer-Policy no-referrer; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-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; ssl_session_tickets on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_ecdh_curve auto; keepalive_timeout 70; ssl_buffer_size 1400; ssl_dhparam ssl/dhparam.pem; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=86400; resolver_timeout 10; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
Maintenant, cela fonctionnera à 100%, en utilisant les chiffrements les plus puissants disponibles. J'ai publié un article de blog il y a quelque temps sur comment activer TLS 1.3 dans Nginx . En prime, à partir des versions 1.18.0, 1.17.10 et supérieures, i maintenir de nouvelles images docker activées par tls1.3
Avez-vous également vérifié / etc / nginx / sites-enabled / yoursite
et si vous utilisez Let's Encrypt, /etc/letsencrypt/options-ssl-nginx.conf
? Seule la modification de /etc/nginx/nginx.conf
peut ne pas suffire.
J'ai rencontré le même problème aujourd'hui. Pour moi, la raison était que j'utilise Certbot de letsencrypt. Il crée /etc/letsencrypt/options-ssl-nginx.conf
, où les protocoles ssl
sont également définis. Si vous ne les ajustez pas ici, changer le /etc/nginx/nginx.conf
n'aidera pas.
Soyez prudent lors de l'édition de /etc/letsencrypt/options-ssl-nginx.conf
car il est géré par Cerbot. Vérifiez si tout fonctionne toujours en utilisant sudo certbot renew --dry-run
.
Pour plus d'informations, je recommande https://libre-software.net/tls-nginx/ .
Essayez simplement de démarrer nginx avec simplement une configuration ssl:
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5;