HTTPが安全ではない理由は?| HTTPとHTTPS

HTTPリクエストと応答は平文で送信されます。つまり、誰でもこれを読むことができます。HTTPSは、TLS/SSL暗号化を使用してこの問題を修正します。

Share facebook icon linkedin icon twitter icon email icon

HTTPセキュリティ

学習目的

この記事を読み終えると、以下のことができます。

  • HTTPの仕組みを理解する
  • HTTPが安全でない理由を学ぶ
  • HTTPとHTTPSの違いを説明する
  • HTTPS用のSSL証明書を取得する方法を学ぶ

HTTPとHTTPS:違いは?

HTTPSは暗号化された HTTP です。2つのプロトコルの唯一の違いは、HTTPSがTLSSSL)を使用して通常のHTTP要求と応答を暗号化することです。その結果、HTTPSはHTTPよりもはるかに安全です。HTTPを使用するWebサイトのURLにはhttp://があり、HTTPSを使用するWebサイトにはhttps://があります。

HTTP vs HTTPS

HTTPとは?

HTTPはHypertext Transfer Protocolの略で、ネットワーク上でデータを転送するために使用されるプロトコル、つまり情報を表示するための規定の順序と構文です。WebサイトのコンテンツやAPI呼び出しなど、インターネット経由で送信されるほとんどの情報は、HTTPプロトコルを使用します。HTTPメッセージには、要求と応答という2つの主要な種類があります。

OSIモデル( OSIモデルとは?参照)では、HTTPは第7層プロトコルです。

HTTP要求とは?HTTP応答とは?

HTTP要求は、ユーザーがWebプロパティと対話するときにユーザーのブラウザによって生成されます。たとえば、ユーザーがハイパーリンクをクリックすると、ブラウザはそのページに表示されるコンテンツに対して一連の「HTTP GET」リクエストを送信します。誰かがGoogleで「HTTPとは?」と検索して、この記事が検索結果に表示されるとき、リンクをクリックすると、ブラウザは一連のHTTPリクエストを作成して送信し、ページのレンダリングに必要な情報を取得します。

これらのHTTP要求はすべて配信元サーバーまたはプロキシキャッシュサーバーに送られ、そのサーバーはHTTP応答を生成します。HTTP応答は、HTTP要求に対する応答です。

典型的なHTTP要求とは?

HTTP要求は、HTTPプロトコルに従う一連のテキスト行です。 GETリクエストは次のようになります


GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.lzlib / 1.2.11
Host: www.example.com
Accept-Language: en

ユーザーのブラウザによって生成されたテキストのこのセクションは、インターネット経由で送信されます。問題なのは、このように、平文で送信されるため、接続を監視している誰でも読むことができることです。(HTTPプロトコルに不慣れな人はこのテキストを理解するのが難しいと感じるかもしれませんが、プロトコルのコマンドと構文のベースライン知識がある人なら誰でも簡単に読むことができます。)

これは、ユーザーがWebサイトまたはWebアプリケーションを介して機密データを送信する場合に特に問題になります。これは、パスワード、クレジットカード番号、その他フォームに入力されたデータであり、HTTPでは、すべてのデータは誰でも読むことができる平文で送信されます。 (ユーザーがフォームを送信すると、ブラウザはこれをHTTP GETリクエストではなくHTTP POSTリクエストに変換します。)

配信元サーバーがHTTP要求を受信すると、HTTP応答を送信します。HTTP応答も同様です。


HTTP/1.1 200 OK
Date: Wed, 30 Jan 2019 12:14:39 GMT
Server: Apache
Last-Modified: Mon, 28 Jan 2019 11:17:01 GMT
Accept-Ranges: bytes
Content-Length: 12
Vary: Accept-Encoding
Content-Type: text/plain

みなさんこんにちは!

WebサイトがHTTPSではなくHTTPを使用している場合、セッションを監視しているユーザーはすべての要求と応答を読み取ることができます。基本的に、悪意のある行為者は、要求または応答のテキストを読むだけで、誰かが要求、送信、または受信している情報を正確に知ることができます。

HTTPSとは?

HTTPSのSは「セキュア」を表します。HTTPSはTLS(またはSSL)を使用してHTTP要求と応答を暗号化するため、上記の例では、攻撃者はテキストではなく、一見ランダムな文字列を見ることになります。

こう見える代わりに:


GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.lzlib / 1.2.11
Host: www.example.com
Accept-Language: en

攻撃者には次のように見えます:


t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZdZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==

HTTPSでは、TLS/SSLはどのようにHTTP要求と応答を暗号化するのか?

TLSは公開鍵暗号化と呼ばれるテクノロジーを使用します。2つのキー、公開鍵とプライベートキーがあり、公開鍵はサーバーのSSL証明書を介してクライアントデバイスと共有されます。クライアントがサーバーとの接続を開くと、2つのデバイスは公開鍵とプライベートキーを使用して、セッションキーと呼ばれる新しいキーについて合意し、両者間の以降の通信を暗号化します。

それ以降のすべてのHTTP要求と応答は、これらのセッションキーで暗号化されます(これはOSIモデルの第6層で行われます)。そのため、通信を傍受した人には、平文ではなく、ランダムな文字列のみが見えます。

暗号化とキーの機能の詳細については、 暗号化とは?を参照してください。

HTTPSはWebサーバーの認証にどのように役立つのか?

認証とは、個人またはマシンが主張している本人であることを確認することを意味します。HTTPでは、IDの検証は行われません。信頼の原則に基づいています。HTTPの設計者は、必ずしもすべてのWebサーバーを暗黙的に信頼する決定を下したわけではなく、当時単にセキュリティ以外の優先事項があったのです。しかし、現代のインターネットでは、認証が不可欠です。

IDカードが個人の身元を確認するように、プライベートキーはサーバーの身元を確認します。クライアントが配信元サーバーとのチャネルを開くと(たとえば、ユーザーがWebサイトに移動するとき)、WebサイトのSSL証明書の公開鍵と一致するプライベートキーを所有していることにより、サーバーが実際にWebサイトの正当なホストであることが証明されます。これにより、次のような認証がない場合に発生する可能性のある多くの攻撃を防止またはブロックできます。

Cloudflareを使用することで、WebサイトがHTTPSを採用できる理由は?

Cloudflareは2014年にUniversal SSLをリリースし、SSL証明書を無料にした最初の企業です。CloudflareサービスにサインアップしたWebサイトはすべて、HTTPSを有効にし、ワンクリックでHTTPから以降することができます。これにより、TLS暗号化が広く利用可能になり、インターネット全体のユーザーとユーザーデータを保護します。

HTTPとHTTPSの詳細については、 混合コンテンツとは?を参照してください。 WebサイトがHTTPSを提供していることを確かめるには、 Cloudflare Diagnostic Centerにアクセスしてください。