Tests TLS 1.3 (version finale RFC 8446) ---------------------------------------
TROLON;PALU sommaire : La version 1.3 finale de TLS (RFC 8446) a été publiée le 13 août 2018 ; on a de la documentation, des bibliothèques pour tester et une vague idée de la manière de configurer les serveurs.
Version 2018-09-24 Conditions opératoires : Debian 8, 9, 10 avec des bouts de testing et de instable dedans, Slackware current, Saccharomyces cerevisiae.
Documentation -------------
Le RFC 8446 (The Transport Layer Security (TLS) Protocol Version 1.3) : https://www.rfc-editor.org/rfc/rfc8446.txt
Un article de Eric Rescorla (alias EKR), l'auteur du RFC : TLS 1.3 Published: in Firefox Today https://blog.mozilla.org/security/2018/08/13/tls-1-3-published-in-firefox-to... (avec le joli logo)
Les commentaires de Stéphane Bortzmeyer : http://www.bortzmeyer.org/8446.html
En complément pour les autres versions de TLS :
RFC 8447 (IANA Registry Updates for TLS and DTLS) précisant les chiffrements (section 8) et groupes (section 9) recommandés : https://www.rfc-editor.org/rfc/rfc8447.txt
RFC 8422 (Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) Versions 1.2 and Earlier) avec des précisions sur ECDH(E) RSA ECDSA EdDSA : https://www.rfc-editor.org/rfc/rfc8422.txt
Sur l'abandon de TLS 1.0 et 1.1 (Deprecating TLSv1.0 and TLSv1.1 - draft-ietf-tls-oldversions-deprecate : https://tools.ietf.org/html/draft-ietf-tls-oldversions-deprecate-00 Voir https://www.ietf.org/mail-archive/web/tls/current/maillist.html pour les avis.
Les bibliothèques et autres logiciels -------------------------------------
Trois bibliothèques classiques :
openssl https://www.openssl.org/ openssl 1.1.1 (LTS) incluant TLS 1.3 final disponible depuis le 11/9/2018 : https://www.openssl.org/blog/blog/2018/09/11/release111/ Si l'ordre par défaut ne vous plaît pas, ou si voulez rajouter les suites CCM, il faut éditer openssl-1.1.1/include/openssl/ssl.h lignes 176 et suivantes.
gnutls https://gnutls.org/ Les versions stables et previous ne parlent pas le TLSv1.3, il faut utiliser la version next branch 3.6.3 : https://www.gnupg.org/ftp/gcrypt/gnutls/v3.6/gnutls-3.6.3.tar.xz
NSS https://developer.mozilla.org/fr/docs/NSS version 3.39 https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_3.39_relea... https://ftp.mozilla.org/pub/security/nss/releases/NSS_3_39_RTM/src/
Serveurs HTTPS --------------
Nginx https://nginx.org/ https://nginx.org/en/download.html version 1.15.3 (mainline, pas stable) avec openssl 1.1.1 A partir des sources (à adapter) : ./configure --with-http_ssl_module --with-http_v2_module \ --with-http_stub_status_module --with-http_gzip_static_module \ --with-http_geoip_module --prefix=/usr/local/nginx \ --add-module=../ngx-fancyindex --with-openssl-opt=no-shared \ --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module \ --add-dynamic-module=/usr/src/nginx-ct-master/ \ --with-openssl=/usr/src/openssl-1.1.1 nginx.conf : ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA; Il manque juste la configuration spécifique des suites TLS 1.3. Ça a l'air stable et utilisable (sous réserve de tests adaptés à la situation)
Apache https://github.com/apache/httpd version 2.5.x (dev) avec openssl 1.1.1, pas envisageable en production Pas facile à installer si openssl 1.1.1 n'est pas installé par défaut On y arrive quand même : [02/Sep/2018:08:11:25 +0000] 192.168.1.253 TLSv1.3 TLS_AES_256_GCM_SHA384 "GET /image.php HTTP/1.1" 353
openssls s_server openssl-1.1.1 utilisable pour des tests ./openssl s_server -accept 443 -www -status -serverpref \ -key privkey13.pem -cert cert13.pem -chainCAfile fullchain13.pem \ -CAfile DST_Root_CA_X3.pem -dhparam dh4096.pem \ -curves X448:X25519:P-521:P-384:P-256 \ -cipher TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256
Clients HTTPS -------------
openssls s_client openssl-1.1.1 utilisable pour des tests openssl s_client -connect monserveur:443 -curves X25519 -ciphersuites TLS_CHACHA20_POLY1305_SHA256 SSL-Session: Protocol : TLSv1.3 Cipher : TLS_CHACHA20_POLY1305_SHA256
nss version 3.39 ou suivante ./nss/dist/Debug/bin/tstclnt -h monserveur -p 443 -b -v -V tls1.3: LD_LIBRARY_PATH=/usr/src/nss/dist/Debug/lib/ /usr/src/nss/dist/Debug/bin/tstclnt -h monserveur -p 443 -b -v -V tls1.3: tstclnt: SSL version 3.4 using 256-bit CHACHA20POLY1305 with 128-bit AEAD MAC tstclnt: Server Auth: 384-bit TLS 1.3, Key Exchange: 255-bit TLS 1.3
gnutls version 3.6.3 ou suivante Voir README.md To download the version controlled sources: $ git clone https://gitlab.com/gnutls/gnutls.git [...] ./gnutls/src/gnutls-cli monserveur - Ephemeral EC Diffie-Hellman parameters - Using curve: SECP256R1 - Curve size: 256 bits - Version: TLS1.3 - Server Signature: ECDSA-SECP384R1-SHA384 - Cipher: CHACHA20-POLY1305
Firefox version 63 (actuellement beta, finale le 23 octobre) ou suivante RAS, ça marche. extensions utilisables : Certainly Something, ConsistentHTTPS, HTTPS Everywhere
Chrome / Chromium version 70 et suivantes (dev channel), 70 finale disponible fin octobre 2018 about://flags TLS 1.3 Sets the TLS 1.3 variant used. – Mac, Windows, Linux, Chrome OS, Android : Enabled (Final) RAS, ça marche.
Outils divers -------------
tshark / wireshark version 3.6.3 Voir Client hello tshark -f 'tcp port 443' -V > capture.txt Extension: supported_versions (len=9) Type: supported_versions (43) Length: 9 Supported Versions length: 8 Supported Version: TLS 1.3 (0x0304) <- version finale Supported Version: TLS 1.2 (0x0303) Supported Version: TLS 1.1 (0x0302) Supported Version: TLS 1.0 (0x0301)
Qualys SSL Labs SSL Server Test SSL Report v1.32.6 (RFC 8446) disponible depuis le 24/9/2018 https://dev.ssllabs.com/ssltest/index.html (https://www.ssllabs.com/ssltest/ est en version v1.32.5 : draft 28 et non finale RFC 8446) <cite>Experimental: This server supports TLS 1.3 (RFC 8446).</cite>
High-Tech bridge (Htbridge) https://www.htbridge.com/ssl/ Conformité PCI DS, HIPAA, NIST reconnait TLS 1.3 final
Observatory by Mozilla https://observatory.mozilla.org/ Pas de TLS 1.3 pour le moment, mais analyse des en-têtes dont CSP
Choix des protocoles pour HTTPS -------------------------------
Si les clients ne sont pas trop anciens : TSL 1.2 et 1.3 certificats RSA et ECDSA avec des bouts de NIST dedans (pour EdDSA avec X25519 il faudra attendre) CHACHA20-POLY1305 et AES-256 et AES-128 courbes X25519:secp521r1:secp384r1:prime256v1 (X448 pas utilisable avec Firefox et Chrome, utilisable pour test et proxies) Attention à la cohérence de l'ordre des courbes (du chiffrement le plus fort vers le plus faible) A étudier : HTTPS sans HTTP mais avec HSTS Preloading (les logs sont moins remplis)
SMTP + StartTLS ---------------
MTA Postfix Testé avec Postfix 3.3.1 et postfix-3.4-20180904 smtpd_tls_protocols = TLSv1, TLSv1.1, TLSv1.2, TLSv1.3, !SSLv2, !SSLv3 tls_high_cipherlist=TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA
checktls https://www.checktls.com/ https://www.checktls.com/#TLSv1_3 CheckTLS email works with TLS 1.3, as do most of our tests. Dans les logs : Sep 23 09:10:26 mervent postfix/smtpd[19790]: Anonymous TLS connection established from www6.checktls.com[159.89.187.50]: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
DNS over TLS ------------
Côté serveur : Stunnel 5.49 + bind La configuration : [dns] accept = :::853 connect = 127.0.0.1:53 cert = /etc/letsencrypt/live/coincoin/cert.pem key = /etc/letsencrypt/live/coincoin/privkey.pem CAfile = /etc/letsencrypt/live/coincoin/chain.pem ciphers = TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA curve = secp384r1 options = NO_TLSv1 options = NO_TLSv1.1
Côté client : getdns_query De la doc : https://linuxfr.org/news/quad9-resolveur-dns-public-et-securise-par-tls http://www.bortzmeyer.org/quad9.html http://www.bortzmeyer.org/7858.html Les tests : $ getdns_query @192.168.1.2 -s -l L monserveur A "address_data": <bindata for 109.190...>, "address_type": <bindata of "IPv4"> $ getdns_query @192.168.1.2 -s -l L monserveur AAAA "ipv6_address": <bindata for 2001:41d0:...>, "rdata_raw": <bindata of 0x200141d0...>
Dans les logs de Postfix : 2018.09.23 09:13:14 LOG6[1]: TLS accepted: new session negotiated 2018.09.23 09:13:14 LOG6[1]: TLSv1.3 ciphersuite: TLS_AES_256_GCM_SHA384 (256-bit encryption)
EOT
JFB
une vague idée de la manière de configurer les serveurs.
On est en prod http/2 TLS 1.3 draft 18 openssl sur nginx 1.13 depuis le printemps 2017. Jamais eu de souci. Merci pour cette belle synthèse, sauvegarde précieusement... et va falloir qu'on mette à jour tout ça !
En prod sur nginx avec la version finale depuis 2 semaines, aucun soucis de notre coté.
par contre, juste un truc, j'ai backporté le package openssl 1.1.1 de debian buster sous stretch,
et debian à ajouter recemment dans
/etc/ssl/openssl.cnf
[system_default_sect] MinProtocol = TLSv1.2 CipherString = DEFAULT@SECLEVEL=2
qui force le tls 1.2 au minimum.
(et du coup nginx ne pouvais plus faire de tls 1.0, tls 1.1)
c'est fixé dans la 1.15 de nginx (qui bypass cette conf), mais sinon, il faut commenter les lignes dans openssl.cnf pour que ca fonctionne avec nginx < 1.15.
----- Mail original ----- De: "Stéphane Rivière" stef@genesix.org À: "French SysAdmin Group" frsag@frsag.org Envoyé: Mardi 25 Septembre 2018 08:17:37 Objet: Re: [FRsAG] [TECH] Tests TLS 1.3 (version finale RFC 8446)
une vague idée de la manière de configurer les serveurs.
On est en prod http/2 TLS 1.3 draft 18 openssl sur nginx 1.13 depuis le printemps 2017. Jamais eu de souci. Merci pour cette belle synthèse, sauvegarde précieusement... et va falloir qu'on mette à jour tout ça !
Bonjour,
Pourquoi ne pas commencer dès à présent ? :-)
gu!llaume
Le 25/09/2018 à 08:17, Stéphane Rivière a écrit :
une vague idée de la manière de configurer les serveurs.
On est en prod http/2 TLS 1.3 draft 18 openssl sur nginx 1.13 depuis le printemps 2017. Jamais eu de souci. Merci pour cette belle synthèse, sauvegarde précieusement... et va falloir qu'on mette à jour tout ça !
Pourquoi ne pas commencer dès à présent ? :-)
:))))))) hi ! Mon premier réflexe a été de passer en mode shadok : parce que s'il n'y a pas de solution, c'est qu'il n'y a pas de pb : car il n'y a juste rien sur www.genesix.org :)
Mais... pas de 404 ce qui est anormal. Alors je relis ton message et teste : le monsieur en gilet noir sur chemise blanche me sort le même planton que toi... Bien sûr ici aucun cert demo.citymagine.com...
Passé le moment de lévitation, entrée dns sur www avec une ip abandonnée il y a deux ans et qui a été récup par un nouveau client OVH (maj oubliée). Remis l'ip du proxy et ça tombe à nouveau sur la 404.
Va falloir que je fasse des scripts avec puppeter :>
Sinon rapport au sujet d'origine, il y a 3 entrées sur ce ndd, dont un stef.genesix.org, copie d'un ouaib du XXème siècle, avec de vrais morceaux fumés de frames d'époque :>>>
Vérifié sur ssllabs, bien classé A+ 100 95 90 90, bien reconnu http/2 mais plus tls 1.3 car ils ne supportent que le dernier draft 28 de 2018 et plus le draft 18 de 2017... Comme j'ai d'autres trucs à recompiler autour de la géoloc et des stats, ça sera l'occase...
Merci Guillaume pour le duo de bugs, la double TG est pour moi :)
Tests TLS 1.3 (version finale RFC 8446) - Errata 1 --------------------------------------------------
1. Versions de gnutls utilisables
Remplacer « 3.6.3 » par « 3.6.4 » dans le texte. On peut utiliser la version 3.6.4 ou la version git, mais pas la version 3.6.3 :
$ ./gnutls-3.6.3/src/gnutls-cli example.org Processed 133 CA certificate(s). Resolving 'example.org:443'... Connecting to '2a01:e34:...:443'... |<1>| Detected downgrade to TLS 1.2 from TLS 1.3 *** Fatal error: An illegal parameter has been received. *** handshake has failed: An illegal parameter has been received.
$ ./gnutls-3.6.4/src/gnutls-cli example.org - Using curve: SECP256R1 - Curve size: 256 bits - Version: TLS1.3 - Server Signature: ECDSA-SECP384R1-SHA384 - Cipher: CHACHA20-POLY1305
$ ./gnutls/src/gnutls-cli example.org - Using curve: SECP256R1 - Curve size: 256 bits - Version: TLS1.3 - Server Signature: ECDSA-SECP384R1-SHA384 - Cipher: CHACHA20-POLY1305
2. Nom des serveurs dans la documentation
Les noms des exemples ne sont pas conformes au RFC 2606 https://tools.ietf.org/html/rfc2606 Remplacer dans le texte « monserveur » par « example.org ». Remplacer également « coincoin » par « example.org ».
3. Licence
À rajouter au début. Licence CC-Zero https://fr.wikipedia.org/wiki/Licence_Creative_Commons
JFB