[FRsAG] [TECH] Tests TLS 1.3 (version finale RFC 8446)

Jean-Francois Billaud billaud at billaud.eu.org
Lun 24 Sep 21:27:32 CEST 2018


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-today/
(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_release_notes
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



Plus d'informations sur la liste de diffusion FRsAG