連載
» 2017年04月13日 05時00分 UPDATE

超入門HTTPS:第2回 HTTPSの詳細 (1/2)

最近ではWebサイトを常時HTTPS対応させることが多い。今回は、HTTPSプロトコルの詳細や証明書、HTTPS化対応の方法などについて解説する。

[打越浩幸,デジタルアドバンテージ]

本入門連載では、システム管理者やシステムエンジニアの方々を主な対象として、IT業界でよく使われる技術や概念、サービスなどの解説をコンパクトにまとめておく。



HTTPSとは

 「HTTPS(HTTP over SSL/TLS)」とは、簡単に言うと「SSL(Secure Sockets Layer)」や「TLS(Transport Layer Security)」で暗号化した通信路上でHTTPプロトコルを利用する技術である。SSLやTLSは、暗号化された通信路を実現するためのプロトコルの1つだ。

 通常のHTTPを使った通信では、Webサーバ側のTCPのポート番号は(デフォルトでは)80番となっている。一方HTTPSの場合は443番でSSL/TLSのポートをリッスン(待ち受け)している。Webブラウザがこのポートに接続すると、最初にSSL/TLSで暗号化された通信路(コネクション)を確立し、それが成功したら、その上でHTTPプロトコルによる通信を行う。

HTTPSの通信モデル HTTPとHTTPSによる通信の比較
HTTPによる通信では、Webサーバのポート80番に接続して、その上でHTTPのコマンドを送受信する。これに対してHTTPSでは、Webサーバのポート443番に接続後、SSLかTLSによって暗号化された通信路を開設し、その中でHTTPのコマンドを送受信する。通信内容は暗号化して保護されているので、どんなコマンドやデータがやりとりされているのかは、第三者には分からない。

 HTTPSの通信確立の段取りをもう少し詳しく説明しよう。

 HTTPプロトコルはステートを持たないプロトコルである。セッションの開始前にネゴシエーションを行わず、TCPで接続したらすぐにGETやPOSTなどの要求メソッドを送信して、サーバ側からの応答を待つことは既に超入門「HTTPプロトコル」で述べた。

 これに対してHTTPSでは最初にSSL/TLSの通信路の開設処理を行う。SSL/TLSはステートを持つプロトコルであり、暗号化アルゴリズムの選択や証明書情報の交換、暗号化用の鍵データの交換などを行って通信路を開設する。それが完了すれば、後はその上でHTTPプロトコルのやりとりを行う。この部分はHTTPプロトコルだけで通信する場合と同じである。

HTTPSに関する規格

 HTTPS関連の規格は、元々はNetscape NavigatorというWebブラウザに実装されていた、暗号化通信のための機能をベースにしている。当初はブラウザと一体化されていたが、SSL/TLSの部分が汎用の暗号化通信プロトコルとして分離され、独立したプロトコルとなった。

 Webブラウザ以外でも、例えばメールのSMTPやPOP、IMAPプロトコルと組み合わせた「SMTP over SSL/TLS」「POP over SSL/TLS」「IMAP over SSL/TLS」などがある。

 SSL/TLSプロトコルのバージョンについて次の表にまとめておく。

バージョン 概要
SSL 1.0 Netscape Navigatorに実装された最初のバージョン。既に廃止
SSL 2.0 最初に公開されたSSL規格(1995年)。既に廃止
SSL 3.0 Netscape社が開発した、SSL 2.0の改善版(改善内容は暗号化やハッシュ化のアルゴリズムの追加や更新、脆弱性の改善など。以下同)。RFC 6101で定義(1996年)。POODLE脆弱性(ぜいじゃく)などにより、既に廃止
TLS 1.0 Internet関連の技術標準化団体IETFがリリースした、SSL 3.0の改善版(内部バージョン番号はSSL 3.1)。RFC 2246で定義(1999年)。脆弱性の発覚などにより、既に非推奨
TLS 1.1 TLS 1.0の改善版(内部バージョン番号はSSL 3.2)。RFC 4346で定義(2006年)。脆弱性の発覚などにより、既に非推奨
TLS 1.2 TLS 1.1の改善版(内部バージョン番号はSSL 3.3)。RFC 5246で定義(2008年)
TLS 1.3 TLS 1.2の改善版(内部バージョン番号はSSL 3.4の予定)。現在は草案段階
SSL/TLSの規格

 当初はSSL、現在ではTLSという名称になっているが(内部的には、SSL 1.0から連続したバージョン番号が付けられている)、このうちSSLプロトコルは現在では全て古いプロトコルとして廃止されている(そのため、本来ならば常時TLSなどと呼ぶべきだが、常時SSLと言うのが一般的である)。特にSSL 3.0には2014年10月にPOODLEという大きな脆弱性が見つかり、話題になったことで覚えているユーザーもいるだろう。

 TLS 1.0や1.1でも、一部の暗号化アルゴリズムの扱いに脆弱性が見つかったことから、もう使わないことが望ましい。現在推奨されるプロトコルはTLS 1.2か1.3である。

 SSL/TLSのバージョンは、例えばInternet Explorerではオプション画面で選択、確認できる。

使用するプロトコルの選択画面 使用するプロトコルの選択画面
これはWindows 10のInternet Explorerのオプション画面。暗号化通信で使用するプロトコルを選択できる。
  (1)使用する暗号化プロトコルを選択する。SSL 3.0以前は既に非推奨なので使用しないこと。可能な限り新しいTLSを利用するのが望ましい。

 ただし最近の新しいブラウザ(Microsoft EdgeやGoogle Chromeなど)ではこのようなプロトコルの選択画面は表示されず、脆弱性のない新しいプロトコルが自動的に利用されるようになっている。

SSL/TLSセッションの詳細

 SSL/TLSによる暗号化通信路の確立までのシーケンスは次のようになっている。

SSL/TLSの開始までの処理 SSL/TLSの開始までの処理
これは典型的なSSL/TLSの開始シーケンスの例。SSL/TLSのバージョンによって細部は異なるし、クライアント側を認証するオプションもある。SSL/TLSでは、最初に暗号化のアルゴリズムの選択やサーバ証明書の受け渡しなどを行う。次に暗号化のための共通鍵データの生成と(サーバの公開鍵を使っての)暗号化を行ってサーバに送信する。サーバ側では秘密鍵を使って共通鍵を取り出す。以後は共通鍵を使って通信内容を暗号化する。

 もう少し詳しく見てみると、次のようになる。

  • サーバ(Webサーバ)とクライアント(Webブラウザ)間の通信路は共通鍵暗号*1方式で暗号化することにする。そのためには、暗号化のために使う共通鍵情報を、誰にも知られずに安全に、サーバとクライアント間で共有する必要がある
  • サーバ側には、公開鍵暗号*2のための証明書がインストールされている。サーバは公開鍵と秘密鍵を持っている
  • サーバは最初にサーバ証明書や公開鍵などの情報をクライアントに送信する
  • クライアントは受信したサーバ証明書に記載されているドメイン名が、アクセスしようとしているサーバのドメイン名と一致することを確認する
  • クライアントは暗号化用の共通鍵データを生成して、サーバの公開鍵で暗号化し、それをサーバに返信する
  • サーバは受信したデータを自分自身の秘密鍵で復号する。これでサーバは暗号化用の共通鍵を入手できる
  • 暗号化や鍵情報交換のためのアルゴリズムなどは最初にお互いにネゴシエーションして決定する
  • 以後は、お互いが持つ暗号化用の共通鍵を使ってデータを暗号化してから送信する
  • 同じ情報をやりとりすると、いつも同じ結果になって通信の内容が漏えいしやすくなるので、乱数などを加えて通信データのランダム化を図る

 SSL/TLSでは、通信内容を暗号化するために、サーバとクライアントは同じ1つの共通鍵を使っている。その鍵データをそのまま相手に送らず、サーバの公開鍵(と乱数データなど)で暗号化してから送信しているところが要点である。この方法を使うことにより、安全に共通鍵データを相手に送信できる。

*1 共通鍵暗号とは、暗号化とその復号で同じ鍵を使う暗号化方式のこと。AESやDESなどがある。SSL/TLSでは、鍵情報交換フェーズで共通鍵の情報をサーバとクライアント間で共有し、以後の通信データの暗号化に使用する。

*2 公開鍵暗号とは、暗号化とその復号で異なる鍵(公開鍵秘密鍵)を使う暗号化方式のこと。公開鍵は第三者に知られてもよいし(むしろ積極的に配布する)、秘密鍵はその所有者のみが保持するべき情報である。データを公開鍵で暗号化した場合は秘密鍵でのみ復号できる(暗号データ送信としての利用)。
 逆にデータを秘密鍵で暗号化した場合は公開鍵で復号できる(デジタル署名としての利用)。証明書情報を秘密鍵で暗号化して送信すれば、公開鍵を使って復号できるので、誰でもその正当性を検証できる。そのような証明書を作成できるのは、秘密鍵を持っている正当な所有者だけだからだ。以下の記事も参照のこと。
・マスターIT/暗号技術「暗号化の基礎


 SSL/TLSではさまざまな暗号化/改ざん検出アルゴリズムや鍵長などのパラメータを選択できる。そのため、Webブラウザは最初にサーバに対して自分自身が利用できるアルゴリズムなどのリストを送信する。サーバはその中からいずれかを選択して利用する。

 暗号技術は日々開発・強化されているし、脆弱性が見つかって使用が推奨されなくなることもある。そのため、最新のセキュリティパッチを適用するなどして、Webサーバやクライアント、証明書などを常に最新の状態にしておくことが望ましい。

       1|2 次のページへ

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

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

メールマガジン登録

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