見出し画像

HTTPセキュリティ

1 HTTP

HTTP(Hypertext Transfer Protocol):WEBサーバとWEBブラウザの間で、HTMLの情報をやり取りするためのプロトコル。
2022年に最新規格HTTP/3が標準化された。
HTTP/3の最大の特徴は、トランスポート層でUDPを利用して通信の効率化を行なっていること(HTTP/3より前のHTTPはトランスポート層でTCPを利用している)。UDPを利用することで信頼性の低下が懸念されるが、QUICというプロトコルを使うことでTCPと同等以上の信頼性を確保できる

HTTPの通信の流れ
HTTPはクライアントからのリクエストに対して、サーバがレスポンスを返答する。例えば、クライアントはGETというメソッドを使ってリクエストを送り、要求したいファイルを指定する。それに対してサーバは200というステータスコードを含むレスポンスで要求されたファイルを応答する

代表的なメソッド
・GETメソッド・・・クライアントがURLの一部にデータを入れてリクエストを送る
・POSTメソッド・・・送りたいデータをボディ部に入れてリクエストを送る
・CONNECTメソッド・・・トンネリングを要求するメソッドで、プロキシサーバを利用してTLS/SSL通信を行う際に利用する

代表的なステータスコード
・200番台・・・成功
・300番台・・・リダイレクト
・400番台・・・クライエントエラー
・500番台・・・サーバエラー

2 HTTPの構造

HTTPの要求リクエストライン、HTTPヘッダ、HTTPボディで構成される。要求のリクエストラインにはリクエストメソッドの情報が格納される

HTTPの応答ステータスライン、HTTPヘッダ、HTTPボディで構成される。応答のステータスラインにはステータスコードの情報が格納される

HTTPヘッダとHTTPボディは空行を1行入れることで別れている

HTTPヘッダの情報
・リクエスト時に利用される主なヘッダ
  ・Autorization・・・認証情報
  ・User-Agent・・・ユーザのブラウザに関する情報
  ・Refere・・・どこから遷移してきたかを表す情報
  ・Cookie・・・クライアントのCookie情報
・レスポンス時に利用される主なヘッダ
  ・Set-Cookie・・・サーバからクライアントに送るCookieの情報
  ・Location・・・リダイレクト先のURLの情報
  ・Server・・・サーバのソフトの種類やバージョンの情報

HTTPボディの情報
GETメソッドの場合は、ボディに情報は入っていない
POSTメソッドは、HTTPボディに送りたいデータを格納してサーバに送る

3 Cookie

Cookie:HTTPの通信は、要求に対して応答を返答するステートレスな通信であり、連続性のある操作をWEBサーバが管理できないため、WEBサーバは Cookieという情報をクライアントに渡すことで、クライアントを識別して連続性のある動作を管理する。Cookieはサーバがクライアントを識別するための情報として生成され、クライアントに渡される。Cookieの情報はクライアントのWEBブラウザに保管される

Cookieはセッション管理の情報
・クライアントがWEBサーバに接続すると、WEBサーバはHTTPレスポンスのヘッダにSet-Cookieを利用してCookieをクライアントに渡す
・Set-Cookieで指定した値がセッションを識別するためのセッションIDになる
・WEBブラウザは次回アクセスするときに、そのセッションIDを使って接続する
指定したセッションIDを利用することによって、WEBサーバは連続性のある動作を管理できるようになる

Cookieの属性で取り扱いを定義する
Cookieは、クライアントとサーバのセッションを管理する機密性の高い情報であるため、Cookieの取り扱いには十分な注意が必要である。
・属性をつけることでCookieの取り扱いを定義できる
  ・Expires属性・・・Cookieの有効期限を設定
  ・Secure属性・・・httpsで通信しているときにだけCookieの情報を送る
  ・HttpOnly属性・・・WEBブラウザに保管したCookieへのアクセスをhttpだけに限定する(JavaScriptを使ったCookieへのアクセスを禁止することで、クロスサイトスクリプティング攻撃への対策になる)

4 TLS

TLS(Transport Layer Security)の機能
1 暗号化機能・・・パケットを暗号化することで盗聴対策を行う
2 サーバ認証・・・接続先のサーバが正規のサーバであるか認証する
3 クライアント認証・・・サーバに接続してきたクライアントが正規のクライアントであることを認証する
4 改ざん検出機能・・・パケットの改ざん有無を確認する

TLSハンドシェイクの流れ
現在、最もよく利用されるTLS1.2通信の流れ
1 TCPのスリーウェイハンドシェイクが行われる
2 TLSハンドシェイクが始まる。クライアントはWebサーバに対してClient Helloを送る。このメッセージには、クライアントが利用できる暗号方式の一覧(暗号スイート)が含まれる
3 サーバはServer Helloで、クライイアンとの暗号スイートの中から、サーバも利用できる最もセキュリティ強度が高いものを選んで応答する
サーバはServerCerficateで、サーバ証明書をクライアントに提示し、Server Key  Exchangeで暗号化通信に必要な情報を送る
クライアント認証が必要な場合はCertificate Requestによってクライアント証明書の要求を行い、Server Hello Doneを送り通信を終える
4 クライアントはClient Certificateによりクライアント証明書を送り、Client Key Exchangeで暗号化通信をするための情報を送る
Certificate Verifyによってデジタル署名を送る
Change Cipher Specによって、暗号化通信に切り替えることを通知し、FinishedでクライアントからのTLSハンドシェイク終了を伝える
5 サーバ側もChange Cipher Specによって暗号化通信に切り替えることを通知し、FinishedでサーバからのTLSハンドシェイク終了を通知する

5 常時SSL/TLSとTLSアクセラレータ

TLS:WEBブラウザとWEBサーバ間の通信を暗号化するTLSはデフォルトスタンダードで、日常的に利用されるようになった

常時SSL/TLS化
従来のHTTPを使った通信は、WEBブラウザで危険な通信であると判断され、警告メッセージが表示されるため、WEBサーバの管理者は常時SSL/TLS化により、利用者が安心して利用できるようにする必要がある
常時SSL/TLSを行うためには、WEBサーバにサーバ証明書を導入してURLをhttps://で始まる文字列に変更する

サーバの負荷を軽減するTLSアクセラレータ
TLSの利用によって安全性を高めることができるが、利用をするためにはクライアントとサーバ間でさまざまな制御情報のやり取りを行う必要があり、その結果、多数のクライアントと通信するサーバは負荷が高くなってしまう
TLSアクセラレータに暗号化、複合処理をさせることでWEBサーバの負荷を軽減できる

6 HSTS

HSTS(HTTP Strict Transport Security):現在ほとんどのサーバがHTTPS通信に対応しているが、クライアントがHTTPを指定すればHTTPの通信が発生するため、HTTPの通信をHTTPSに強制させる仕組みとしてHSTSという技術がある。
HTTPSが設定されているWEBサイトにHTTPで接続しようとすると、HTTPSで接続するようにWEBブラウザへ通知する。
通知を受けたWEBブラウザは、それ以降HTTPで接続しようとしても、自動的にHTTPの通信をHTTPSに切り替える

HSTSの流れ
・HSTSを設定したWEBサイトにクライアントがHTTPでの接続要求を送ると、WEBサイトはレスポンスヘッダにStrict-Transport-Securityの情報を含めて応答する。この情報にはHSTSの有効期限や、適用範囲の情報などが含まれる
・応答を受け取ったWEBブラウザは、有効期限の間、対象のWEBサイトに対してHTTPSを利用した通信に強制される

HSTSは初回のHTTPの通信を制御できない
HSTSでHTTPSに通信を強制できるのは、2回目以降の通信

プリロードHSTS:クライアントがHTTPを指定した場合でも、初回からHTTPSに強制する仕組み。プリロードHSTSに登録しておくことで、WEBブラウザは事前にHTTPSで接続すべきサイトを確認する。プリロードHSTSに登録が確認してできれば、初回のHTTPの通信もHTTPSに強制される

この記事が気に入ったらサポートをしてみませんか?