web-dev-qa-db-ja.com

Nginx SSLハンドシェイクエラーのトラブルシューティング方法

Ubuntu 16.04でnginxのHTTPSを構成しようとしています。 listen 443 sslステートメントを使用してすでに設定しており、証明書と秘密キーファイルの場所を指定しています。その後、Sudo service nginx restartを使用してサーバーを再起動しました。

curl https://my_ip_addressを実行すると、次のメッセージが表示されます。

curl: (35) gnutls_handshake() failed: Handshake failed

私が知っている2つのログファイル/var/log/nginx/access.log/var/log/nginx/error.logを確認しました。ただし、リクエストからのトレースは表示されません。

私の質問:SSLハンドシェイクが失敗したときに何かがログに記録されますか?もしそうならどこ?一般に、HTTPリクエストが送信される前、またはサーバーによって抽出される前にSSLプロトコルにエラーがある場合のこのような問題のトラブルシューティング方法は?

編集:私は私の設定から次の行を削除することでそれを機能させました:

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;

更新:ssl_ecdh_curve secp384r1;行が問題の原因であるようです。これがなければ、すべてが正常に機能しますが、SSLハンドシェイクは失敗します。不思議なことに、エラーメッセージは「共有暗号がありません」というものです。何をしているのかわからないので、削除しました。また、ssl_staplingも削除しました。何の目的かわからないため、独自のエラーメッセージが作成されていました。

7
Michael Hewson

@Paulが言ったように、解決策はログレベルを上げることでした。 nginx.confファイルの行を変更したので、次のようになります。

error_log  /var/log/nginx/error.log debug;

ログレベルが高くなっているため、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
7
Michael Hewson

実際、Nginxでオプションssl_ecdh_curveを使用して Diffie Hellman key exchange を構成していますが、パラメーターファイルを指定していません。したがって、オプションssl_dhparamを使用する必要があり、opensslでファイルを作成する必要があります。

ファイルを作成:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Nginxでファイル以上のDiffie Hellman構成を使用します。

ssl_dhparam                     /etc/ssl/certs/dhparam.pem;
ssl_ecdh_curve                  secp384r1;
4
Jens Bradler

あなたはあなたのnginxサーバー設定をチェックすることができます、config行があります:ssl_ciphers、デフォルト値は:ssl_ciphers HIGH:!aNULL:!MD5; ( http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ciphers )、ただし、私の場合、nginx-ingress-controllerのデフォルトはデフォルトの構成よりも小さい、およびnginxデバッグログの表示エラーは:共有暗号化なしです。構成ファイルにいくつかの暗号を追加してnginxをリロードすると、問題が気に入りました。この構成テンプレートを参照できます: https://mozilla.github.io/server-side-tls/ssl-config-generator /

0
user8292879