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 sur la base de la dernière analyse TrustWave échoue maintenant en raison de l'activation de TLS 1.0.
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 définit la configuration nginx pour le site comme un A, mais avec TLS 1.0, je pense donc que le reste de ma configuration est correcte, il ne désactivera 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
Réponses:
Le problème ici est que la
Server name indication
partie de la négociation TLS se fait après que la connexion elle-même a été négociée. Et le protocole est négocié lors de la négociation de la connexion.Il peut être possible d'appliquer 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é.
la source
Server Name Indication
fait partie du TLSClientHello
. C'est dans le premier message envoyé par le client, et non négocié plus tard. Cela ressemble plus à Nginx a un défaut de conception. il semble qu'il accepte la connexion, puis transmet à l'hôte virtuel que ce soit bon ou mauvais. Au lieu de cela, nginx doit analyser le nom du serveur, consulter l'hôte virtuel, puis rejeter la connexion si elle ne répond pas aux exigences de l'hôte virtuel. Le défaut de conception est probablement digne de CVE car TLS 1.0 est parfois discutable. C'est clairement une violation de C&A dans certaines circonstances.Allez trouver un bloc serveur que vous souhaitez utiliser comme modèle de négociation SSL "par défaut". Trouvez votre ligne d'écoute
et ajouter
default_server
à la fin de la ligneCela 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. Il est donc impossible d'avoir certains domaines virtuels avec TLSv1 activé et d'autres désactivés.
la source
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:
Vérifiez ensuite la connexion via TLSv1 par commande:
Vous devriez obtenir quelque chose comme ça:
la source