web-dev-qa-db-ja.com

Apache TLS(SSL)のパフォーマンス

Xeon CPU、32GB RAM、Centos6を実行するRAIDSSDを備えた非常に強力な専用サーバーを実行しています。それでも、HTTPSによってページのダウンロード時間が100ミリ秒以上長くなることがあります。 20msの速度を上げるために私たちにできることはありますか?

Apacheの設定は次のとおりです。

SSLHonorCipherOrder on

SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect file:/dev/urandom 512

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-EC$
SSLProxyCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECD$

SSLProtocol all -SSLv3 -SSLv2
SSLProxyProtocol all -SSLv3 -SSLv2

SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/var/run/ssl_scache(5120000)"
SSLSessionCacheTimeout  300

SSLUseStapling On

SSLStaplingCache "shmcb:/var/run/ssl_stapling(128000)"
SSLStaplingReturnResponderErrors off

SSLStaplingStandardCacheTimeout 3600
SSLStaplingErrorCacheTimeout 600
SSLStaplingResponderTimeout 5
1
marcusds

反対のすべての主張にもかかわらず、HTTPSはあなたのウェブサイトを遅くします。これは、クライアントとサーバーが開始する前にSSL/TLS暗号をネゴシエートする必要があるためです。ただし、afterの後、ほとんどのサイトで速度低下は無視でき、SSLには大きなメリットがあります。

さらに、デフォルトはhttpであるため、httpsのみのサイトでこれを入力すると、httpsバージョンにリダイレクトする必要があり、別のラウンドトリップが発生します。

100msは実際には最初の接続の速度低下としてはそれほど悪くはなく、私が言うように、その後接続が確立されるため、速度低下は発生しません。したがって、最初に、初期接続速度は重要ですが、サイトを閲覧することも非常に重要であり、ここでは100ミリ秒の速度低下の影響を受けないようにする必要があります。

SSL/TLS構成は、セキュリティとパフォーマンスの両方の点で実際にはかなり見栄えがします。最新の高速な暗号とスイートを使用しています(ただし、暗号スイートは新しいブラウザーのみに非常に制限されており、それが意図的なものである場合は、TLSv1とTLSv1.1もオフにすることをお勧めします)、SSLキャッシングを設定します(クライアントを保存するため)各接続のSSLセッションの再ネゴシエーション)、およびSSLステープリングのセットアップ(クライアントに証明書の有効性を確認するための追加のルックアップを保存するため)。

しかし、私が提案できるいくつかのことは以下のとおりです。これらはhttpsを使用することの影響を減らすかもしれませんが、その最初の100msの接続遅延を減らすことはありません:

  1. サーバーのキープアライブがオンになっていることを確認します(デフォルトでオンになっているはずですが、再確認するのが最善です)。応答に「Connection:close」ヘッダーが表示されないようにnotする必要があります。キープアライブがないと、SSLCacheは無意味です。

  2. SSLSessionCacheTimeoutを300秒または5分から増やします。あなたのサイトにいて、周りをブラウジングしているなら、あなたは簡単にその外に出ることができます。 SSLSessionCacheのサイズはすでに制限されているため、このタイムアウトをより高い値に増やしても問題はありません。

  3. HSTSを実装して、サイトが常にhttpsを優先するようにブラウザーに通知します(ユーザーがブラウザーのアドレスバーにプロトコルを入力しなかった場合、またはhttpを入力した場合でも)。これにより、最初のリダイレクトが保存されます。

  4. HTTP/2はhttps接続の速度に役立ちます。これは、並列接続を使用する人がいないためですが、さらに重要なことに、他の方法でパフォーマンスを向上させることができます。ただし、Apacheについてはまだ実験段階です(私には十分安定しているようですが)。

また、定期的にサーバーを実行することをお勧めします https://www.ssllabs.com/ssltest/index.html 新しい脆弱性があるため、このスペースでは状況が絶えず変化するため、SSL/TLS構成をテストします。見つかりました。

4
Barry Pollard

HTTP/2を有効にすると、互換性のあるブラウザの接続数が減り、ページの読み込み時間が短縮されます。ただし、これによってその接続の遅延が減少することはありません。デモ ここ

参照 この質問 -この状況ではレイテンシーが重要です。オーストラリアのシドニーにあるhttpsサーバーに対して速度テストを実行しました。別のシドニーサーバーからのテストでは、SSLハンドシェイクは46ミリ秒で、米国のEC2からは213ミリ秒です。違いは、ラウンドトリップパケット時間に加えて、遅延がゼロであっても避けられないオーバーヘッドがあるためです。この必須のレイテンシーが何であるかはわかりませんが、おそらく実験によって解決できます。

サーバーに近い、または遠くにあるクライアントからテストを行いましたか?pingは何ですか? 別の便利なページ httpsハンドシェイクの周り。 100msは、おそらくhttpsのオーバーヘッドほど悪くはありません。

誰かが推奨できるApacheの調整があるかもしれません。あなたがあなたのウェブサイトのリンクを投稿するならば、誰かが見るかもしれません。

1
Tim

これはあまり答えではありませんが、SSLを最適化する前にSSLがどのように機能するかを学びたい場合は、ここに高速HTTPSのチェックリスト

  • ECDSA証明書
  • エントロピーソース
  • TLS1.2プロトコル
  • ハードウェアでサポートされている暗号スイート:AES-NI
  • SSLセッションキャッシュ
  • OCSPステープリング
  • HTTP/2

私のサーバー関連の知識はすべてこのリポジトリに公開されています https://github.com/szepeviktor/debian-server-tools

ではごきげんよう!

0
Szépe Viktor