システムの前面にNginxがあり、背面にApacheへのプロキシがあります。接続にはSSL/TLSを使用します。
質問:
これが私の設定です:
ssl_certificate /path/ssl.crt;
ssl_certificate_key /path/ssl.key;
ssl_dhparam /path/dh.pem;
ssl_buffer_size 4k;
ssl_session_timeout 4h;
ssl_session_cache shared:SSL:20m;
ssl_session_tickets on;
ssl_trusted_certificate /path/trust.crt;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
Mozilla SSL Configuration Generator を使用して、以下の暗号を生成します。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
暗号はほとんどのブラウザに対応するためのものでした。 Strict-Transport-Securityも設定しています。
私たちのシステムは、CloudFrontを使用してAmazonAWSで実行されます。現在、SSLラボがテストを実行するのに約130秒かかります。また、Pingdomは、1つのリクエストのSSL接続に少なくとも220msかかることを示しています。
ありがとう!
Nginxとincapsulaでパフォーマンスの問題が発生しましたが、問題は使用されている暗号に関連していることがわかりました。 IncapsulaはDHE-RSA-AES128-SHAに接続していたため、サーバーのパフォーマンスが低下し、負荷が高くなりました。 https://wiki.mozilla.org/Security/Server_Side_TLS の「中間リスト」を使用し、暗号を使用していくつかのストレステストを実行し、機能したものについてこの結果を取得しました。
Cipher Worst response time
DHE-RSA-AES128-SHA 15.745s
DHE-RSA-AES256-SHA 15.271s
AES128-SHA 1.421s
AES256-SHA 1.765s
DES-CBC3-SHA 1.459s
ご覧のとおり、DHE- *は正常に機能していませんが、AES128-SHAは正常に機能しています。したがって、パフォーマンスに問題があると思われる場合は、数百または数千の接続でストレステストを構築し、1つの暗号のみを使用するようにnginxを構成します。暗号が正常に機能しているかどうかを確認し、無効にしようとする必要があります(クライアントに対して最終設定をテストすることを忘れないでください。または、 ssllabs test を使用して、ユーザーをブロックしていないかどうかを確認してください。 )
他のいくつかのオプション:- CloudFrontを使用してSSLを終了します 、httpを使用してサーバーを呼び出します。リクエストは、パブリックインターネットよりも安全である可能性が高いAWSネットワークを介して送信されますが、個人データまたは財務データがある場合は、これを実行したくない場合があります。 - ELBでSSLを終了します 、HTTPを使用してサーバーを呼び出します。これはVPCと1つのリージョン内にあるため、データが通過するリンクは少なくなります。繰り返しますが、データによっては理想的ではない場合があります。
現在、CloudFrontでSSLを終了し、CloudFrontがエッジロケーションとオリジンサーバーの間に別のSSLセッションをセットアップすることができます。これは二重SSLである可能性があり、待ち時間が長くなり、問題の根本原因となる可能性があります。それはあなたの努力があなたが期待したほど成功しなかった理由を説明するでしょう。