最近、nginx設定を変更して、TLSv1.2とより多くのより安全な暗号をサポートします。変更以降、nginxエラーログには次のエラーが記録されます。
2015/01/28 23:55:57 [crit] 16898#0:* 18712916 SSL_do_handshake()が失敗しました(SSL:エラー:140A1175:SSLルーチン:SSL_BYTES_TO_CIPHER_LIST:不適切なフォールバック)、SSLハンドシェイク、クライアント:。。。、サーバー:0.0.0.0:443
Nginxの設定は次のとおりです。
server {
root /var/www/fl/current/public;
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/wildcard.pem;
ssl_certificate_key /etc/nginx/ssl/wildcard.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ユーザーがサイトにアクセスできないことについてのメールをいくつか受け取りました。あるユーザーは、これはFirefoxで発生するエラーだと述べています。
安全な接続に失敗しました
******。comへの接続中にエラーが発生しました。クライアントがサーバーがサポートするよりも低いバージョンのTLSにダウングレードしたため、サーバーはハンドシェイクを拒否しました。 (エラーコード:ssl_error_inappropriate_fallback_alert)
受信したデータの正当性を確認できなかったため、表示しようとしているページを表示できません。
私が正しく理解していれば、クライアントとサーバーがサポートしているバージョンよりも低いバージョンのTLSをクライアントが使用している場合、フォールバックアラートはセキュリティ対策になります。このエラーは、より高いプロトコルバージョンをサポートしていることを考えると、大いに意味があるようです。私が理解していないのは、この変更が私たちのサイトに接続するときに一部のユーザーに問題を引き起こす理由です。これは私たちの設定またはそのブラウザの欠陥ですか?
Qualys SSL Server Testで「A」のスコアを付けたので、以前の設定に戻すのをためらっています。
ブラウザは通常、SSLv23ハンドシェイクを行います。このハンドシェイクにより、彼らはサポートする最高のプロトコルバージョン(主に今日のTLS1.2)を発表しますが、サーバーをこのバージョンに制限しません。したがって、適切に実装および構成されたTLSスタックを備えているが、TLS1.0のみをサポートするサーバーは、単にTLS1.0で応答し、最初の試行で接続が成功します。
ただし、サーバー側にいくつかの不良なTLSスタックまたは構成ミス、またはいくつかの不良なミドルボックス(ロードバランサーなど)があり、このSSLv23ハンドシェイクが失敗します。この場合、ブラウザはハンドシェイクで使用されるプロトコルをダウングレードします。つまり、明示的なTLS1.0ハンドシェイクに続いて明示的なSSL3.0ハンドシェイクを試みます(一部のブラウザはすでにSSL3.0を無効にしているため、これを試みません)。
新しいブラウザーは、ダウングレードされた接続を行う場合、TLS_FALLBACK_SCSV疑似暗号を使用します。 TLS_FALLBACK_SCSVに対応するサーバーが、サポートするプロトコルバージョンが低いダウングレードされた接続を検出した場合(ダウングレードはTLS1.0を使用しますが、サーバーはTLS1.2をサポートします)、POODLEのような攻撃が発生したと想定して接続を閉じます。
しかし、サーバーに接続するときに、クライアントがそもそもなぜダウングレードするのでしょうか。
変更318904に関連するパッチセットがアップロードされました(BBlackによる):クライアントハンドシェイクの非クリティカルSSL_R_VERSION_TOO_LOW