こんな人に向けて書いてます
この記事はWeb技術に関して知識が無い方やこれから学ぶという方向けに作成しました。
また、この記事の内容は 3 Minutes Networking を参考にしています。
HTTP とは?
簡単に言えば、Webページを表示するまでに生じるやりとりの手順のことです。
※正式には Hyper Text Transfer Protocol とし、1990年代から使われています。
そもそも、Webページはテキストや画像などのハイパーリンクを埋め込めるハイパーテキスト(HTMLで構成された文書)のことを指しており、ハイパーテキストはブラウザなどを介して表示します。表示する際にはそのハイパーテキストがある場所をURLを用いることで表示させます。
URLは管理されているドメインやパスが記載されたリソースとリソースの処理方法を指示するスキームに分かれており、HTTP は複数あるスキームの1つです。
ハイパーテキストが格納されているWebサーバにURLを介してデータを要求し、Webサーバは要求に対して応答するようになっており、この要求(リクエスト)と応答(レスポンス)の過程で用いる転送がHTTPです。
HTTPのやり取りは大きく以下の2つに分けられます。
1. HTTPリクエスト
クライアント側からWEBサーバ側に対してどのような処理を行って欲しいかを伝えます
2. HTTPレスポンス
WEBサーバ側がクライアント側からきた要求(HTTPリクエスト)に対し、WEBサーバ内の処理の結果を伝えます
WEBページを表示する際の過程をざっくりと図で表すと、上記のようにすることができます。
※上の矢印がHTTPリクエスト、下の矢印がHTTPレスポンス
HTTPS とは?
簡単に言えば、暗号化したHTTPのことで、盗聴、改ざん、なりすまし、を防止します。
HTTPSではクライアントとWebサーバとのやりとりをSSLハンドシェイク/TLSハンドシェイクという4つの過程で暗号化します。
1. クライアント側からWebサーバ側に接続を要求
クライアント側とWebサーバ側が双方とも利用できる暗号化方式に調整することが必要です。
※暗号化方式は複数あります。
2. SSLサーバ証明書の送付
SSLサーバ証明書(公開鍵含む)をクライアント側に送付し、クライアント(ブラウザ)が有するルート証明書でSSLサーバ証明書を確認します。また、この際にクライアント側は共通鍵を生成します。
※正しいWebサーバであることを確認できなかった場合、ブラウザ上で警告が出ます。
3. 暗号化した共通鍵をWebサーバ側に送付
クライアント側は生成した共通鍵をSSLサーバ証明書内にある公開鍵を用いて暗号化した上でWebサーバ側に送り返します。
4. 暗号化通信
使用する暗号化方式を最後に確認し、暗号化通信を実行します。
クライアント側で有している共通鍵を使ってデータを暗号化した上でWebサーバ側に送信し、Webサーバ側は暗号化されたデータを受け取り、Webサーバ側が持つ共通鍵を使って暗号化された内容を平文にします。
なぜHTTPSが必要なのか?
HTTPでは要求しているクライアントがどこなのか、そしてレスポンスを返すWebサーバが正しいかどうかを求める仕組みがありません。
平文でのやりとりを行っているため、攻撃者がメッセージの内容を盗聴することができてしまいます。やりとりの過程で認証を行っていないため、第三者が内容を改ざんすることもできてしまいます。
そうしたことから情報漏洩やコンピューターウイルスの感染などへのリスクヘッジとして標準化されてきています。また、2014年にGoogleがSEO対策に掛かるランキングシグナルにHTTPSを用いることを発表していることから、サイト検索における順位にも影響することが言えます。
HTTPS のデメリット
- Webサーバ側はSSL証明書を定期的に更新する必要がある
- SSLサーバ証明書の発行には金銭・時間ともにコストが掛かる(無料で発行できるものもある)
- 非対応のWebページは見れなくなる
- 平文に比べてサーバに負荷が掛かる
デメリットと記載していますが、インターネットを悪用している人たちが潜む昨今では必要な対応・投資と言えます。
HTTPS だから絶対安全という訳ではない
SSLに対応したサイトは通信の過程で内容を盗聴される心配は原則としてありませんが、近年では多くのフィッシングサイトもHTTPSに対応してきている上、SSL/TLSの脆弱性をつくような攻撃も出てきていると言われています。
※カスペルスキーの公式ブログが参考になります。
IT業界に携わるようになって、インターネットやWebの世界では「100%」や「絶対」ということがほとんど無いということを強く感じます。残念ながらセキュリティ対策の新技術が生み出されても、すぐにその技術を破るような攻撃が生まれるというまさに「いたちごっこ」状態です。そういった現状から「対策を更新したから安心」するのではなく、常にアンテナを張ってアップデートしていくことが最も有効なリスクヘッジのための手段になるのではないでしょうか?