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も削除しました。何の目的かわからないため、独自のエラーメッセージが作成されていました。
@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
実際、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;
あなたはあなたの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 /