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

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

学習目的

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

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

関連コンテンツ


さらに詳しく知りたいとお考えですか?

是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!

当社がお客様の個人データをどのように収集し処理するかについては、Cloudflareのプライバシーポリシーをご確認ください。

記事のリンクをコピーする

HTTPとHTTPS:違いは?

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

HTTPとHTTPS

HTTPとは?

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

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

サインアップ
すべてのCloudflareプランでDDoS攻撃対策が実現します。

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.l zlib/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

Hello World!

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

ホワイトペーパー
TLSの力を最大化

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.l zlib/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要求と応答は、これらのセッション鍵で暗号化されます。そのため、通信を傍受した人には、平文ではなく、ランダムな文字列しか見ることができません。

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

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

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

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

また、SSL証明書は、その証明書を発行した認証局によってデジタル署名されています。これにより、サーバーが主張する本人であることを確認することができます。

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

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

HTTPとHTTPSの詳細については、混合コンテンツとは?を参照してください。