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