最近ではWebサイトを常時HTTPS対応させることが多い。今回は、HTTPSプロトコルの詳細や証明書、HTTPS化対応の方法などについて解説する。
本入門連載では、システム管理者やシステムエンジニアの方々を主な対象として、IT業界でよく使われる技術や概念、サービスなどの解説をコンパクトにまとめておく。
「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プロトコルはステートを持たないプロトコルである。セッションの開始前にネゴシエーションを行わず、TCPで接続したらすぐにGETやPOSTなどの要求メソッドを送信して、サーバ側からの応答を待つことは既に超入門「HTTPプロトコル」で述べた。
これに対してHTTPSでは最初にSSL/TLSの通信路の開設処理を行う。SSL/TLSはステートを持つプロトコルであり、暗号化アルゴリズムの選択や証明書情報の交換、暗号化用の鍵データの交換などを行って通信路を開設する。それが完了すれば、後はその上でHTTPプロトコルのやりとりを行う。この部分はHTTPプロトコルだけで通信する場合と同じである。
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ではオプション画面で選択、確認できる。
ただし最近の新しいブラウザ(Microsoft EdgeやGoogle Chromeなど)ではこのようなプロトコルの選択画面は表示されず、脆弱性のない新しいプロトコルが自動的に利用されるようになっている。
SSL/TLSによる暗号化通信路の確立までのシーケンスは次のようになっている。
もう少し詳しく見てみると、次のようになる。
SSL/TLSでは、通信内容を暗号化するために、サーバとクライアントは同じ1つの共通鍵を使っている。その鍵データをそのまま相手に送らず、サーバの公開鍵(と乱数データなど)で暗号化してから送信しているところが要点である。この方法を使うことにより、安全に共通鍵データを相手に送信できる。
*1 共通鍵暗号とは、暗号化とその復号で同じ鍵を使う暗号化方式のこと。AESやDESなどがある。SSL/TLSでは、鍵情報交換フェーズで共通鍵の情報をサーバとクライアント間で共有し、以後の通信データの暗号化に使用する。
*2 公開鍵暗号とは、暗号化とその復号で異なる鍵(公開鍵と秘密鍵)を使う暗号化方式のこと。公開鍵は第三者に知られてもよいし(むしろ積極的に配布する)、秘密鍵はその所有者のみが保持するべき情報である。データを公開鍵で暗号化した場合は秘密鍵でのみ復号できる(暗号データ送信としての利用)。
逆にデータを秘密鍵で暗号化した場合は公開鍵で復号できる(デジタル署名としての利用)。証明書情報を秘密鍵で暗号化して送信すれば、公開鍵を使って復号できるので、誰でもその正当性を検証できる。そのような証明書を作成できるのは、秘密鍵を持っている正当な所有者だけだからだ。以下の記事も参照のこと。
・マスターIT/暗号技術「暗号化の基礎」
SSL/TLSではさまざまな暗号化/改ざん検出アルゴリズムや鍵長などのパラメータを選択できる。そのため、Webブラウザは最初にサーバに対して自分自身が利用できるアルゴリズムなどのリストを送信する。サーバはその中からいずれかを選択して利用する。
暗号技術は日々開発・強化されているし、脆弱性が見つかって使用が推奨されなくなることもある。そのため、最新のセキュリティパッチを適用するなどして、Webサーバやクライアント、証明書などを常に最新の状態にしておくことが望ましい。
Copyright© Digital Advantage Corp. All Rights Reserved.