最近では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サーバやクライアント、証明書などを常に最新の状態にしておくことが望ましい。
以上のようにしてSSL/TLSの通信路が確立できれば、後はその通信路上でHTTPプロトコルを使った通信を行えばよい。この部分はHTTPでもHTTPSでも変わらない。Webブラウザのデバッグ機能を使えば、HTTPS通信であってもメソッドやその内容を確認できる。
HTTPSではWebサーバにセットされている「サーバ証明書」が重要な役割を持つ。暗号化の鍵として利用されるだけでなく、そのWebサーバがある特定のドメインに属している正当なシステムであることを保証したり、ユーザーに対して、そのドメインが正規の組織が管理しているドメインであることを表明したりするからだ。サーバ証明書にはWebサーバの所有者の情報や公開鍵暗号システムで利用される公開鍵などが含まれ、それが発行者によって電子署名されている。
Webサーバにセットする証明書には次のように幾つかの種類がある。
種別 | 内容 |
---|---|
DV(Domain Validation) ドメイン認証型証明書 |
一番手軽なサーバ証明書。ドメインの正当な所有者であれば、メールなどで申し込み可能(物理的な個人/組織/団体として存在していなくてもよい)。比較的低コスト。無料のものもある |
OV(Organization Validation) 実在認証型証明書 |
ドメインの所有者の組織や団体が実際に存在することを確認して保証する証明書。他人がある組織を偽って証明書を取得する、といった不正はできない (脆弱性や手続きのミスを除く) |
EV(Extended Validation) 拡張実在認証型証明書 |
一番厳格な証明書。組織(会社など)が確実に存在し、社会的にもある程度の期間継続していて、さらに担当者なども実際に存在することが確認されるなど、かなり厳格な存在チェックが行われる。存在チェックが厳しくコストも高いが信頼性は一番高い |
Webサーバ証明書の種類 |
DVからOV、EVとなるにつれて所有者の存在確認などが厳しくなり、その分証明書としての信頼性が高くなるが、コストも上昇する。
もっとも、Let's Encryptのような無料の証明書サービスもあるので(次のリンク参照)、以前よりもHTTPS導入のためのハードルは低くなってきているのも事実である。
以上のいずれかの証明書が使われていれば、Webブラウザのアドレスバーに暗号化を表す鍵マークなどが表示される。特にEV証明書の場合は、組織名が(ほとんどのブラウザでは)緑色で大きく表示されるなど、より特別に正当な組織であることが分かるようになっている。
証明書の詳細は次の通りである。
サーバ証明書ではデータを符号化するためにさまざまな数学的アルゴリズムを利用できる。それらのうち、SHA-1を使った証明書は安全性が低いため(SHA-1の脆弱性が見つかったため)、現在では非推奨となっている。SHA-1を使った証明書(や、自己発行の、いわゆるオレオレ証明書)をインストールしてあるWebサイトへ接続するとWebブラウザが警告メッセージを表示するようになっている。
現在HTTP(だけ)で運用しているWebサーバを全面的にHTTPS化(常時HTTPS化)する場合、サーバ証明書を導入してWebサーバの設定を変更するだけでは済まない。
さまざまなリソースをHTTPS経由でもアクセスできるように更新する他、今までHTTPでアクセスされてきた外部公開URLなどをHTTPSでのアクセスに切り替えさせる(リダイレクトする)対策も必要である。これを行わないと、今までブックマークされたり、告知していたりしたリンク情報(例:「http://~」など)が急に全て無効になってしまうからだ。
HTTPS化する方法を全て説明するのは本記事の趣旨からは外れるので、ここでは主な作業項目だけを列挙しておく。
本記事ではHTTPSプロトコルについて簡単にまとめてみた。WebサイトのHTTPS化/常時SSL化には、通信内容の暗号化による情報漏洩の防止だけでなく、SEO対策やサイトの高速化など、さまざまなメリットがある。まだ移行していないなら、ぜひ移行・導入を検討するべきだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.
Windows Server Insider 險倅コ九Λ繝ウ繧ュ繝ウ繧ー