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
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é.
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.
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)
---