会議

会議

SSL 256ビット証明書を使用した遅いApacheサーバーに問題があります

ab -n 500 https://example.com/
Time per request 29 ms

ab -n 500 http://example.com/
Time per request 10 ms

両方のリクエストで52バイトが送信され、テストは同じデータセンター内のサーバーから実行されます。

会議

SSLEngine on
SSLProtocol All -SSLv2
SSLHonorCipherOrder On
SSLCipherSuite ALL:!ADH:!EXP:!LOW:!RC2:!3DES:!SEED:!RC4:+HIGH:+MEDIUM

SSL が通常の HTTP リクエストより 3 倍遅いのは正常ですか?

答え1

どのようにサーバーをベンチマークしましたか? HTTPS サーバーの背後で実行されているアプリケーションは何ですか? サーバーはどの CPU を使用していますか? ご覧のとおり、あなたの質問には多くの重要な詳細が欠けています...

いずれにせよ、SSL は確かに「純粋な」HTTP よりもいくらか遅いです。公開鍵暗号化は対称鍵暗号化よりもはるかに遅く、これがまさに、公開鍵が秘密の対称鍵と対称鍵暗号化に切り替えるチャネルを交換するためにのみ使用される理由です。

答え2

HTTPS は、交換するデータ量が多く (サーバーからの X.509 証明書)、安全なデータ接続を設定する必要があるため、速度が遅くなります。

ab「接続」時間を指定でき、そこでタイミングの違いがわかります。TLS の設定には、設定しない場合よりも時間がかかります。

答え3

何が実行され、ブラウザが何を実行するかの違いを認識する必要があります。(何が実行されるかについては、あまり詳しくないのでab答えません)。ab

例えば:

  1. TLSセッションの再利用を使用していますかab?ブラウザはそうしますし、それによってパフォーマンスが大幅に向上します(後続のリクエスト)。これはWiresharkで確認できます(おそらくhttps://ask.wireshark.org/questions/9007/ssl-session-reuse便利です)
  2. 遅いことが知られている暗号を使用しているab(ssl_request_log でどの暗号がネゴシエートされるか確認できます)
  3. HTTPS 接続で HTTP キープアライブをサポートしていますか? ページ上のすべてのアセットを取得するのに十分な時間だけでも、サポートする必要があります。これにより、サーバーに送信される SSL/TLS 要求の数が大幅に削減されます。
  4. サイトにはキャッシュに適したコンテンツがありますか (特にブラウザのキャッシュ用)。 などの応答ヘッダーを利用していますかCache-Control: public, max-age=3600, s-max-age=3600

これらに集中すれば、HTTPS のみのサイトを快適かつ迅速に実行できるようになります。これは、(実質的に) HTTPS のみのビデオ ストリーミング サイトに対して私が行っていることであり、SSL 接続時間を心配する必要がありませんでした。

答え4

ウェブサイトの速度低下の理由:

  • SSL 証明書には、ハンドシェイク中にデータ量を増加させる複数の中間証明書が含まれます。

  • Web サイトが OCSP 要求に応答して接続を確立するのに 1/3 秒かかるため、OCSP と CRL のパフォーマンスも修正されません。

高速 HTTPS 接続に関する推奨事項:

  • CPU リソースの使用率は、テキスト コンテンツを圧縮するか、暗号化タスクを処理するように現在のプロセスをアップグレードすることで軽減できます。

  • ページ上のすべてが HTTPS 経由で取得されるようにする必要があります。

  • 助けを借りるスパイディ- Web ページの読み込み時間を最小限に抑える Google のオープンソース ネットワーク プロトコル。

  • 認証局側では、CAはOCSPとCRLの応答時間を短縮する300ms から 100ms (ミリ秒) まで。

  • CA は、追加のバイトと時間を消費するため、SSL 証明書の中間チェーンのサイズを削減できます。

関連情報