Webの表示速度を遅くする「SSLハンドシェイク」とは現場にキく、Webシステムの問題解決ノウハウ(3)

本連載は、日立製作所が提供するアプリケーションサーバ「Cosminexus」の開発担当者へのインタビューを通じて、Webシステムにおける、さまざまな問題/トラブルの解決に効くノウハウや注意点を紹介していく。現在起きている問題の解決や、今後の開発のご参考に(編集部)

» 2010年02月09日 00時00分 公開
[@IT編集部@IT]

知っていますか? SSLハンドシェイク

 Webアプリケーションで提供するWebページにSSLを適用した場合、SSLでは通信相手の認証/通信内容の暗号化などの負荷の高い処理が実行されるため、WebページのWebブラウザに表示される速度が遅くなることがある。この現象は、SSLセッションを再利用して、「SSLハンドシェイク」(上記の認証/暗号化を含んだ一連の処理)を簡略化することで、解決できる場合がある。

 今回は、それらの問題を解決してWebブラウザの表示速度を向上させる方法について話をうかがったので、その内容を紹介する。

現象の見え方

 今回は、以下の問題についての話だ。

Webアプリケーションで提供するWebページにSSLを適用した場合、Webブラウザ上への表示速度が遅い。


SSLを理解するのが、問題解決への最短距離

 こういった現象は、読者も日常的に見ていることだろう。その原因を考えるうえで、とても基本的なことから確認してみたい。

SSLとは

 SSLとは、インターネット/イントラネットで発生し得る「盗聴」「改ざん」「なりすまし」といったトラブルを防止するための技術だ。SSLでは、これらのトラブルを防止するために、アプリケーションデータを送受信する前に、SSLハンドシェイクと呼ばれる通信処理をWebブラウザ(クライアント)/Webサーバ間で実行する。SSLハンドシェイクでは主に、以下に示す処理を実行する。

SSLハンドシェイクでの問題点

 SSLハンドシェイクの処理イメージを次の図に示そう。

図1 Webアプリケーションによく見られる画面構成 図1 SSLハンドシェイクの処理イメージ
  1. アプリケーションデータの暗号化に利用するアルゴリズムをクライアント/サーバ間で決定。
  2. CAから発行された証明書を利用して、クライアント/サーバの認証を行う証明書を利用して、クライアント/サーバの認証を行う
  3. 1.のアルゴリズムに基付き、暗号鍵を生成暗号鍵を生成

 図1の赤い矢印の個所が上記のリスト1、2の処理に該当する。ここでは、アプリケーションデータの暗号化アルゴリズムを決定するための処理、および、証明書の送受信/証明書の検証によるクライアント/サーバ間の認証を実行するため、CPU処理時間と通信量を多く要するコストの高い処理になっており、SSLでの通信性能に最も影響する。

 そのため、Webアプリケーションで提供するWebページにSSLを適用した場合、Webページのブラウザに表示される速度が遅くなることがあるという。

SSLセッション/アクセラレータを利用しよう

 この問題の解決方法として、2つ考えられる。1つはSSLセッションを再利用する方法だ。

 SSLセッションは、一度SSLハンドシェイクが完了した状態を意味し、一意の識別子(セッションID)で特定可能な情報だ。SSLセッションを再利用して、2回目以降のSSLハンドシェイクを簡略化することにより、アプリケーションデータの暗号化アルゴリズムを決定するための処理、および、証明書の送受信/証明書の検証によるクライアント/サーバ間の認証を省略できる。その結果、Webアプリケーションで提供するWebページにSSLを適用した場合のWebブラウザ上への表示速度を向上できる。

 また、SSLアクセラレータを利用することにより、Webサーバに掛かっているSSL関連処理の負荷を軽減できる。

【1】SSLセッションを再利用する場合

 現在多くのWebブラウザ、および、WebサーバではSSLセッションを再利用することにより、2回目以降のSSLハンドシェイクを簡略化し、SSLによる通信性能の向上を図ることが可能になっている。

 例えばアプリケーションサーバとしてCosminexusを使っている場合、SSLセッションを再利用することにより、SSLハンドシェイクの中の以下の処理をスキップできるという。

  1. アプリケーションデータの暗号化に利用するアルゴリズムをクライアント/サーバ間で決定
  2. CAから発行された証明書を利用して、クライアント/サーバの認証を行う

 SSLセッションを再利用する場合のSSLハンドシェイクの処理のイメージを次の図に示そう。

図2 SSLセッションを再利用する場合のSSLハンドシェイクの処理のイメージ 図2 SSLセッションを再利用する場合のSSLハンドシェイクの処理のイメージ

 SSLセッションを再利用するためには、Hitachi Web Serverのコンフィグファイル(httpsd.conf)に以下に示す設定を行う必要があるという。なお、Windows版とUNIX版では、Hitachi Web Serverのプロセス構造が異なるため、設定方法が一部異なるそうだ。

  • Windows版の場合
    • SSLSessionCacheSize SSLセッションを管理するキャッシュのサイズ(単位:バイト)
    • SSLSessionCacheTimeout SSLセッションの有効期間(単位:秒)
  • UNIX版の場合
    SSLセッションを管理するためのサーバ(gcacheサーバ)を利用して、SSLセッションを管理するため、Windows版と同様の設定に加えて、(gcacheサーバ)の設定を行う
    • SSLCacheServerPath gcacheサーバヘのパス名
    • SSLCacheServerPort gcacheサーバのポート番号

【2】SSLアクセラレータを利用する場合

 SSLアクセラレータとは、SSL関連の処理(SSLハンドシェイク、および、アプリケーションデータの暗号/復号)を高速化するための専用ハードウェアだ。SSLアクセラレータを利用することにより、Webサーバに掛かっているSSL関連処理の負荷を軽減できる。

 SSLアクセラレータを利用した場合のシステム構成を次の図に示そう。

図3 SSLアクセラレータを利用した場合のシステム構成 図3 SSLアクセラレータを利用した場合のシステム構成

SSLを適用する場合、速度とのトレードオフを考慮

 今回は、SSLセッションを再利用する/SSLアクセラレータを利用することで、SSLによる通信性能を向上させる手順について説明した。

 Webアプリケーションで提供するWebページにSSLを適用する場合には、今回の説明内容を参考にして、SSLによる通信性能の向上を図るのは、いかがだろうか。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。