SSLアクセラレータとは
SSL関連の処理(SSLハンドシェイク、および、アプリケーションデータの暗号/復号)を高速化するための機器のこと。
SSLアクセラレータの導入目的
・WEBサーバのSSL負荷軽減
・アプリケーション側のSSL対応コスト削減
・WEBサーバのSSL対応コスト削減
参考:SSLアクセラレータの必要性
http://www.fujitsu.com/jp/products/network/security-bandwidth-control-load-balancer/ipcom/material/data/ssl/index.html
前提条件
インフラ環境はクラウド化していない。物理サーバ構成。
SSLアクセラレータの選定
・アプライアンス型
・自作
(※カード型は各WEBサーバに設置が必要となるため除外)
アプライアンス型
ベンダーが提供するSSLアクセラレータ専用機器。
SSLアクセラレータとして必要な機能がすべて搭載しており、ハード構成も特化したものとなっているため大量のトラフィックに対しても安心。
また、機器に対して保守もあるため運用面で安心。
機器候補
・日立ソリューションズ:ArrayAPVシリーズ
http://www.hitachi-solutions.co.jp/array/sp/apv/about.html
貸し出しサービスがあり、検証してから購入が可能
・セイコーソリューションズ:NetWiserシリーズ
http://www.seiko-sol.co.jp/products/loadbalancer/loadbalancer_lineup/loadbalancer_sx3840/
自作
Nginxなどオープンソースのリバースプロキシ機能とSSL対応モジュールを利用してSSLアクセラレータを構築する。
好きなハードウェアやミドルウェアを組み合わせることができるため、最低限の構成で始めることができ、今後の負荷状況に応じて柔軟に対応しやすい。
その反面、運用の負担が大きい。
参考記事
http://snickerjp.blogspot.jp/2015/03/nginx-ssl-accelerator.html
今回、本番環境、検証環境、別ネットワーク環境などSSLアクセラレータが分散かつ複数台必要となるため、できれば自作で進められるとコストパフォーマンスは良い。
SSLハンドシェルクの負荷対策
SSLハンドシェイクのコストは高い。通常のhttp通信に比べるとhttpsの通信はかなりコスト高となる。
その対策として2回目以降の通信はハンドシェイク処理を省略させるべく、SSLセッションを利用する。
SSLアクセラレータをスケールアウトする場合を考慮し、SSLセッションは共有化しておく。
共有化の方法の検討
方法1:サーバ内のセッションキャッシュを他サーバ同士で共有する
各SSLアクセラレータサーバに保有するSSLセッションキャッシュを他のアクセラレータサーバから参照し合う仕組み。
懸念点は、スケールアウトするほどセッションキャッシュの同期コストが高くなる。
参考:SSLセッションキャッシュを共有したいだけだった
https://speakerdeck.com/nojima/sslsetusiyonkiyatusiyuwogong-you-sitaidakefalseren-sheng-datuta
参考:細かすぎて伝わらないSSL/TLS (分散された Server の cache の共有)
https://techblog.yahoo.co.jp/infrastructure/ssl-session-resumption
方法2:SSLセッションキャッシュ共有の専用キャッシュサーバを用意する
1つのセッションキャッシュサーバに、全てのセッションをキャッシュさせて共有する。
懸念点は、セッションキャッシュサーバ自体の運用コストがかかること。
また、キャッシュサーバへのトラフィックが集中することで、キャッシュサーバ自身のスケールアウトが必要となった際に、キャッシュの同期について考慮が必要となる。
方法2は構成自体が複雑になるため、できれば方法1で進めたい。
別の方法:セッションチケットを利用
セッションチケットを利用すると、クライアント側にセッションをキャッシュさせることができる。
スマホに対応できない場合もあるという情報もあり要調査。
参考:細かすぎて伝わらないSSL/TLS (TLS Session Ticket 拡張(Transport Layer Security(TLS)Session Resumption without Server-Side State))
https://techblog.yahoo.co.jp/infrastructure/ssl-session-resumption
Amazon CloudFrontなどクラウドサービス環境ではセッションチケットに対応している場合もある。
インフラがAWSやAZULなどの環境下であれば悩みも少しは減るだろう。。