はじめに
デプロイしたWEBアプリケーション。「保護されていない」というメッセージが表示されることはありませんか?
これは、GoogleChromeで「HTTPS」に対応していないサイトとみなされているからです。
このままではセキュリティ面で大きな問題となる場合が、、、
今回は、「HTTP」の危険性と、「HTTPS」について解説させていただきます。
まずは「HTTP」とは
HTMLで書かれている文章などをやりとりする際に使われる通信手段(プロトコル)です。
Webサービスを実現するためのプロトコルとして長く使われてきましたが、セキュリティー面で以下の問題があります。
【問題1】データを暗号化する仕組みがない
- 盗聴される危険性がある
- 個人情報やクレジットカード情報などを送受信する際に大きな問題となる。
【問題2】通信相手を認証しない
認証にはサーバを認証するサーバ認証と、
クライアントを認証するクライアント認証の2種類ある。
【サーバを認証しない場合】
HTTPを使ったWebサービスは偽のサーバに誘導されて
個人情報を盗まれる危険性があります。(フィッシング詐欺)
【クライアントを認証しない場合】
同じくクライアントも認証しないので、Webサーバ側も通信相手を確認できず危険です。
【問題3】通信データの改ざんを検出できない。
HTTPには改ざんを検出する機能がないです。
例えば、クライアントが1個みかんを購入するとします。
購入を実行しサーバへデータが送られる途中で、攻撃者から100個に書き換えられてしまいました。
サーバには100個でデータが届きました。
これがデータの改ざんです。
このように、HTTPでは改ざんを検出できない為、通信途中でデータを勝手に書き換えられる危険性があります。
その問題を解消する為に生まれたのが「HTTPS」
「HTTP」に「TLS(SSL)」を組み込んだもの。
結論からお伝えすると、「HTTPS」対応にすることで、先ほどの「HTTP」の問題点はすべてクリアできます。
「TLS」とは
トランスポート層のセキュリティプロトコル。
以下の機能をしてくれる。
-
「サーバ」と「クライアント」で認証ができる(「TLS」にて実行される「ハンドシェークプロトコル」で証明書が発行される為)
-
通信データを暗号化してくれる(「ハンドシェークプロトコル」で共有される、暗号化鍵を使用する為)
-
改ざんを見つけてくれる(クライアントが「HTTPS」をする際に、「ハンドシェークプロトコル」で共有したMAC鍵を送信し、サーバ側で改ざんを検知できる仕組みがある為)
「ハンドシェークプロトコル」とは
「TLS」の中にあるプロトコル。
事前に「クライアント」と「サーバ」間でやりとりを行い、確約したら、暗号化鍵などを生成してくれる。
生成された暗号化鍵などは「クライアント」と「サーバ」間で共有される。
まとめ
このように、「HTTP」での通信はかなり無防備に近い状態で危険ということが分かりました、、、
Webアプリケーション制作する際は、「HTTPS」に対応させることが必須ですね。