6
votes

J'ai suivi toutes les instructions mais je ne parviens pas à afficher TLS 1.3 sur NGINX

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


0 commentaires

5 Réponses :


1
votes

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:

 entrez la description de l'image ici

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>


4 commentaires

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.



-1
votes

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.


0 commentaires

5
votes

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


0 commentaires

-1
votes

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/ .


0 commentaires

-1
votes

Essayez simplement de démarrer nginx avec simplement une configuration ssl:

ssl_protocols       TLSv1.2 TLSv1.3;
ssl_ciphers         HIGH:!aNULL:!MD5;


0 commentaires