J'essaie de configurer HTTPS pour nginx sur Ubuntu 16.04. Je l'ai déjà configuré avec listen 443 ssl
, et lui a indiqué où trouver le certificat et les fichiers de clé privée. Après cela, j'ai redémarré le serveur avec Sudo service nginx restart
.
Maintenant, quand je curl https://my_ip_address
, J'obtiens le message suivant:
curl: (35) gnutls_handshake() failed: Handshake failed
J'ai vérifié les deux fichiers journaux que je connais, /var/log/nginx/access.log
et /var/log/nginx/error.log
; mais il ne montre aucune trace de quoi que ce soit de la demande.
Ma question: est-ce que quelque chose est enregistré lorsque la prise de contact SSL échoue? Si oui, où? En général, comment résoudre des problèmes comme celui-ci, où il y a une erreur dans le protocole SSL avant que la requête HTTP ne soit envoyée ou extraite par le serveur?
EDIT: Je l'ai fait fonctionner en supprimant les lignes suivantes de ma configuration:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
Mise à jour: le ssl_ecdh_curve secp384r1;
line semble être à l'origine du problème. Sans elle, tout fonctionne bien, mais avec elle, la prise de contact SSL échoue. Curieusement, le message d'erreur est qu'il n'y a "pas de chiffre partagé". Je ne suis pas sûr de ce qu'il fait, alors je l'ai juste retiré. J'ai également supprimé le truc ssl_stapling parce que je ne sais pas à quoi il sert, et il créait ses propres messages d'erreur
Comme l'a dit @Paul, la solution était d'augmenter le niveau de journalisation. J'ai changé une ligne dans mon nginx.conf
fichier, il se lit maintenant comme suit:
error_log /var/log/nginx/error.log debug;
Et maintenant que le niveau de journalisation est plus élevé, il enregistre les erreurs de prise de contact SSL:
2016/09/19 22:38:08 [info] 10114#10114: *2 SSL_do_handshake() failed (SSL: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher) while SSL handshaking, client: 108.162.242.24, server: 0.0.0.0:443
En fait, vous avez utilisé l'option ssl_ecdh_curve pour configurer échange de clés Diffie Hellman dans Nginx mais vous n'avez pas fourni de fichier de paramètres. Par conséquent, vous devez utiliser l'option ssl_dhparam et devez créer un fichier avec openssl.
Créer un fichier:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Utilisez le fichier et la configuration Diffie Hellman ci-dessus dans Nginx:
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ecdh_curve secp384r1;
Vous pouvez vérifier votre configuration de serveur nginx, il y a une ligne de configuration est: ssl_ciphers, la valeur par défaut est: ssl_ciphers HIGH:! ANULL:! MD5; ( http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ciphers ), mais parfois n'est pas prévu, dans mon cas, la valeur par défaut de nginx-ingress-controller est inférieure à la configuration par défaut et l'erreur d'affichage du journal de débogage nginx est: pas de chiffrement partagé. lorsque j'ajoute des chiffres dans le fichier de configuration et que je recharge nginx, le préambule a été supprimé. Et vous pouvez référencer ce modèle de configuration: https://mozilla.github.io/server-side-tls/ssl-config-generator /