web-dev-qa-db-fra.com

Désactiver TLS 1.0 dans NGINX

J'ai un NGINX agissant en tant que proxy inverse pour nos sites et fonctionne très bien. Pour les sites qui ont besoin de SSL, j'ai suivi raymii.org pour m'assurer d'avoir un score SSLLabs aussi fort que possible. L'un des sites doit être conforme à la norme PCI DSS mais basé sur la dernière analyse TrustWave), car TLS 1.0 est activé.

Au niveau http dans nginx.conf, j'ai:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Pour le serveur spécifique que j'ai:

ssl_protocols TLSv1.1 TLSv1.2;

J'ai changé de chiffrement, déplacé des choses hors du niveau http et vers chaque serveur de site ssl mais peu importe quand je lance:

openssl s_client -connect www.example.com:443 -tls1

J'obtiens une connexion valide pour TLS 1.0. SSLLabs met la configuration nginx pour le site en tant que [~ # ~] a [~ # ~] mais avec TLS 1.0, donc je crois que le reste de mon la configuration est correcte, elle ne désactive tout simplement pas TLS 1.0.

Réflexions sur ce que je pourrais manquer?

openssl version -a
OpenSSL 1.0.1f 6 Jan 2014
built on: Thu Jun 11 15:28:12 UTC 2015
platform: debian-AMD64

nginx -v
nginx version: nginx/1.8.0
24
Shawn C.

Le problème ici est que le Server name indication une partie de la négociation TLS est effectuée après la négociation de la connexion elle-même. Et le protocole est négocié lors de la négociation de la connexion.

Il peut être possible d'imposer aucun TLS v1.0 pour cet hôte virtuel si vous configurez cet hôte virtuel sur une adresse IP sur le serveur qui n'a aucun autre hôte virtuel associé. Par conséquent, nginx saurait, sur la base de l'adresse IP, qu'aucun TLS v 1.0 n'est autorisé.

12
Tero Kilkanen

Allez trouver un bloc serveur que vous souhaitez utiliser comme modèle de négociation SSL "par défaut". Trouvez votre ligne d'écoute

server {
    ...
    listen 443 ssl;
    ssl_protocols TLSv1.1 TLSv1.2;
    ...
}

et ajouter default_server jusqu'à la fin de la ligne

server {
    ...
    listen 443 ssl default_server;
    ssl_protocols TLSv1.1 TLSv1.2;
    ...
}

Cela permet à nginx d'avoir une configuration lors de la négociation de la version TLS à utiliser. L'inconvénient est que vous ne pouvez avoir qu'un seul serveur par défaut par port. Donc, avoir certains domaines virtuels avec TLSv1 activé et d'autres désactivés est un pas.

18
Thego Rilla

J'ai désactivé TLSv1 sur la version 1.8.1 de nginx. Vous devez mettre à jour openssl vers les versions 1.0.1g ou 1.0.1h. Ensuite, supprimez simplement 'TLSv1' de la directive ssl_protocols:

ssl_protocols TLSv1.1 TLSv1.2

Vérifiez ensuite la connexion via TLSv1 par commande:

openssl s_client -tls1 -connect example.com:443 < /dev/null

Vous devriez obtenir quelque chose comme ça:

CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1474531027
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
4
r0den